如何从第二个表中删除“孤立”记录

时间:2015-01-15 12:23:18

标签: sql ms-access

如果相应的记录不存在于另一个表中,我想从表中删除记录。

即。 table1与table2有一对多的关系。我需要删除table2中的孤立记录,其中table2.id不存在于table1中。

我在Access中试过这个:

DELETE * FROM t2 RIGHT JOIN t2 ON t1.id = t2.id WHERE t1.id is NULL

但是我得到“JOIN操作中的语法错误”。我看不出有什么问题。

4 个答案:

答案 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];