Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 删除不在更新中的所有行_Mysql_Sql - Fatal编程技术网

Mysql 删除不在更新中的所有行

Mysql 删除不在更新中的所有行,mysql,sql,Mysql,Sql,我有一个表,我想用另一个表更新它,所以我有一些类似于: UPDATE table1 JOIN table2 ON table1.id = table2.fk_table1 SET table1.field1 = table2.field1 但我还想从该表中删除所有不在此更新中的行,例如: DELETE FROM table1 WHERE id not IN (UPDATE ...) 他们的方法是在一个优化sql请求中完成,还是我必须在两个请求中完成 谢谢您必须在两个请求中执行此操作,因为它们

我有一个表,我想用另一个表更新它,所以我有一些类似于:

UPDATE table1 JOIN table2 ON table1.id = table2.fk_table1 SET table1.field1 = table2.field1
但我还想从该表中删除所有不在此更新中的行,例如:

DELETE FROM table1 WHERE id not IN (UPDATE ...)
他们的方法是在一个优化sql请求中完成,还是我必须在两个请求中完成


谢谢

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

首先启动更新语句:

UPDATE table1 JOIN table2 ON table1.id = table2.fk_table1 SET table1.field1 = table2.field1
然后通过在选择中转换更新来触发删除请求:

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

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

您可以使用下面的查询-

DELETE FROM tbl1.* FROM 
table1 AS tbl1 
LEFT JOIN table2 AS tbl2 ON table1.id = table2.fk_table1 
WHERE tbl2.id IS NULL
但根据表大小和创建锁定的速度会很慢,所以您应该首先从表1中获取所有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,或者删除put in子句,或者删除多个块

DELETE FROM table1 WHERE id IN ();

WHERE id not IN(select…)所以我必须在2 requestest中执行,我不能只删除不受我的更新影响的行?让我们等一下,guru,但我认为将remove与UPDATE组合不能在同一个查询中