一、跨表删除
根据多个关联表删除表中的记录,sql语句如下:
方式一:
delete t1.*, t2.*
from 表一 t1, 表二 t2
where t1.表一id = t2.表二id(注:该id与表一的id关联,表一id为外键)
and t1.date(举例以日期为条件) < '2016-11-11'
注:以上语句将删除表一、表二选定条件的记录
方式二:
from 表一 t1
inner join 表二 t2
on t1.表一id = t2.表二id(注:该id与表一的id关联,表一id为外键)
where t1.date(举例以日期为条件) < '2016-11-11'
(以上两种方式将删除表一、表二两张表相关的记录,如果你只想删除一张表的记录,如果你只需删除一张表中的记录你只需指定 delete 表一.*这样就只删除表一中的记录)
跨表删除也可以使用left join,sql如下:
delete t1.*
left join 表二 t2
on t1.id = t2.id
where t2.type is null
二、跨表更新
根据多个关联表更新表中的记录,sql语句如下:
update 表一 t1, 表二 t2
set t1.price = t2.price+10
where t1.id = t2.id
and p.date < '2016-11-11'
update 表一 t1
inner join 表二 t2
where p.date < '2016-11-11'
方式三:
(使用left outer join来做多表update,比方说如果表二中没有产品价格记录的话,将表一的isdeleted字段置为1)
update 表一 t1
set t1.deleted = 1
where t2.idis null
以上例子都是两张表之间做关联,但是只更新一张表中的记录,其实是可以同时更新两张表的,如下sql:
set t2.price = t2.price +10,
p.更新时间= curdate()
where p.创建时间 < '2016-11-11'