一、跨表删除
根据多个关联表删除表中的记录,SQL语句如下:
方式一:
DELETE t1.*, t2.*
FROM 表一 t1, 表二 t2
WHERE t1.表一ID = t2.表二ID(注:该ID与表一的ID关联,表一ID为外键)
AND t1.DATE(举例以日期为条件) < '2016-11-11'
注:以上语句将删除表一、表二选定条件的记录
方式二:
DELETE t1.*, t2.*
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.*
FROM 表一 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
ON t1.ID = t2.ID
SET t1.price = t2.price+10
WHERE p.date < '2016-11-11'
方式三:
(使用left outer join来做多表update,比方说如果表二中没有产品价格记录的话,将表一的isDeleted字段置为1)
UPDATE 表一 t1
LEFT JOIN 表二 t2
ON t1.ID = t2.ID
SET t1.deleted = 1
WHERE t2.IDIS null
以上例子都是两张表之间做关联,但是只更新一张表中的记录,其实是可以同时更新两张表的,如下sql:
UPDATE 表一 t1
INNER JOIN 表二 t2
ON t1.ID = t2.ID
SET t2.price = t2.price +10,
p.更新时间= CURDATE()
WHERE p.创建时间 < '2016-11-11'