删除不在UPDATE中的所有行

时间:2015-08-21 08:41:24

标签: mysql sql

我有一张桌子,我想用另一张桌子更新,所以我有类似的东西:

UPDATE table1 JOIN table2 ON table1.id = table2.fk_table1 SET table1.field1 = table2.field1

但我也希望将此表中所有不属于此UPDATE的行减少为:

DELETE FROM table1 WHERE id not IN (UPDATE ...)

他们是一种在一个优化sql请求中执行此操作的方法,或者我必须在两个请求中执行此操作?

由于

2 个答案:

答案 0 :(得分:1)

您必须在两个请求中执行此操作,因为它们是两个不同的操作DML操作:

首先触发更新声明:

Convert

然后通过在select:

中转换update来触发删除请求
UPDATE table1 JOIN table2 ON table1.id = table2.fk_table1 SET table1.field1 = table2.field1

注意:在update命令中使用select with same condition来获取在第一个语句中更新的记录列表。

答案 1 :(得分:1)

您可以使用以下查询 -

DELETE FROM tbl1.* FROM 
table1 AS tbl1 
LEFT JOIN table2 AS tbl2 ON table1.id = table2.fk_table1 
WHERE tbl2.id IS NULL

但是根据表大小和创建锁定会很慢,所以你应该首先从table1获取所有id,然后删除它们。

SELECT tbl1.id FROM 
table1 AS tbl1 
LEFT JOIN table2 AS tbl2 ON table1.id = table2.fk_table1 
WHERE tbl2.id IS NULL

现在删除这些ID,根据记录编号放入子句或多个块。

DELETE FROM table1 WHERE id IN ();