从where子句中使用的表中删除

时间:2010-05-10 20:05:01

标签: mysql sql-delete synchronize

我正在编写一个小脚本来同步2个MySQL表(t1被'镜像'到t2)

在一个步骤中,我想删除t2中已在t1中删除的具有相同ID的行。

我尝试了这个查询:

delete from t2 where t2.id in 
    ( select t2.id left join t1 on (t1.id=t2.id) where t1.id is null )

但Mysql禁止我在删除和选择中同时使用t2(顺便说一句声音逻辑)

当然,我可以将查询拆分为2个查询:首先选择ID,然后删除带有这些ID的行。

我的问题:你是否有更简洁的方法从t2中删除t1中不存在的行?只有一个查询?

3 个答案:

答案 0 :(得分:0)

delete t2.* 
from t2 
left join t1 on (t1.id=t2.id) 
where t1.id is null;

答案 1 :(得分:0)

此查询连接两个表,只选择那些在新表中没有伙伴的表,从而允许您一次删除它们:

DELETE t2 FROM t2
LEFT JOIN t1
ON t2.id = t1.id
WHERE t1.id IS NULL;

答案 2 :(得分:0)

如果对t2使用t1的左连接,对于t2中没有匹配的任何行,t1字段的值将为NULL,因此这应该有效:

DELETE FROM t2
LEFT JOIN t1 ON t1.id = t2.id
WHERE t1.id IS NULL;