天天看点

MySql 跨表删除与更新

一、跨表删除

       根据多个关联表删除表中的记录,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'