我有一个问题。
DELETE FROM A
WHERE i NOT IN
( SELECT i FROM B WHERE j = 1
UNION select i from C
UNION select i from D
);
基本上删除 A 中字段 i
未出现在表 B、C 或 D 中的所有行。如果只是:
DELETE FROM A
WHERE i NOT IN
( SELECT i FROM B
);
然后这可以通过左连接轻松完成
DELETE A FROM A
LEFT JOIN B
ON A.i = B.i
WHERE B.id is NULL;
(假设每个表在schema中都有一个id字段)
我想我的问题是以上是否延伸到 具有以下解决方案的三表方案?
DELETE A FROM A
LEFT JOIN B
ON A.i = B.i AND B.j = 1
LEFT JOIN C
ON A.i = C.i
LEFT JOIN D
ON A.i = D.i
WHERE B.id is NULL
AND C.id is NULL
AND D.id is NULL
最佳答案
像这样:
DELETE
FROM A
WHERE NOT EXISTS (
SELECT *
FROM B
WHERE B.i = A.i
)
AND NOT EXISTS (
SELECT *
FROM C
WHERE C.i = A.i
)
AND NOT EXISTS (
SELECT *
FROM D
WHERE D.i = A.i
);
关于mysql - 改进mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3342108/