如何从第二个 table 中删除 'orphaned' 条记录

How to delete 'orphaned' records from second table

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

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

我已经在 Access 中试过了:

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

但我得到 "Syntax error in JOIN operation"。我看不出有什么问题。

去掉DELETE后的*..

我会这样解决的:

DELETE FROM t2
WHERE id not in (
   SELECT id from t1);

不确定通过连接删除是否有效。不过,它需要是 LEFT JOIN,因为您要删除联接第一部分中未与任何内容联接的所有行。另外,你自己加入t2,估计是打错了..

DELETE语句中没有*,改成这样:

DELETE
FROM t2 
WHERE id not in (SELECT id FROM t1)

这将有助于:

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

我和@Elizabeth 有同样的需求,我发现@Tobb 的方法很管用……但是速度很慢,在我的 table 上执行大约需要一分钟。我发现以下 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];