我正在编写一个小脚本来同步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中不存在的行?只有一个查询?
答案 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;