如何从第二个 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];
如果相应的记录不存在于另一个 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];