如果相应的记录不存在于另一个表中,我想从表中删除记录。
即。 table1与table2有一对多的关系。我需要删除table2中的孤立记录,其中table2.id不存在于table1中。
我在Access中试过这个:
DELETE *
FROM t2
RIGHT JOIN t2
ON t1.id = t2.id
WHERE t1.id is NULL
但是我得到“JOIN操作中的语法错误”。我看不出有什么问题。
答案 0 :(得分:1)
删除*
之后的DELETE
..
我会这样解决它:
DELETE FROM t2
WHERE id not in (
SELECT id from t1);
不确定使用加入进行删除是否有效。但是,它需要是LEFT JOIN
,因为您要删除未与任何内容连接的连接的第一部分中的所有行。此外,你正在加入自己的t2,猜测它只是一个错字..
答案 1 :(得分:1)
这会有所帮助:
DELETE
from t2
FROM t1
RIGHT JOIN t2
ON t1.id = t2.id
WHERE t2.id is NULL
答案 2 :(得分:0)
DELETE 语句中没有*,因此请更改为:
DELETE
FROM t2
WHERE id not in (SELECT id FROM t1)
答案 3 :(得分:0)
我和@Elizabeth的需求相同,我发现@Tobb的方法行得通...但是像糖蜜一样慢,大约需要一分钟时间在我的桌子上执行。我发现以下SQL命令序列在一秒钟内即可达到相同的结果:
ALTER TABLE t2 ADD COLUMN [USED] YESNO;
UPDATE t2 SET [USED]=true WHERE id IN (SELECT id FROM t1);
DELETE FROM t2 WHERE [USED] <> true;
ALTER TABLE t2 DROP COLUMN [USED];