2

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

4

3 回答 3

0
delete t2.* 
from t2 
left join t1 on (t1.id=t2.id) 
where t1.id is null;
于 2010-05-10T20:09:09.533 回答
0

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

DELETE t2 FROM t2
LEFT JOIN t1
ON t2.id = t1.id
WHERE t1.id IS NULL;
于 2010-05-10T20:10:12.113 回答
0

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

DELETE FROM t2
LEFT JOIN t1 ON t1.id = t2.id
WHERE t1.id IS NULL;
于 2010-05-10T20:16:13.430 回答