У меня есть запрос.
DELETE FROM A
WHERE i NOT IN
( SELECT i FROM B WHERE j = 1
UNION select i from C
UNION select i from D
);
В основном удалите все строки в где поле 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;
(Предположите, что каждая таблица имеет идентификационное поле в схеме),
Я предполагаю, что моим вопросом является затем вышеупомянутое, расширяется на три сценария таблицы со следующим решением?
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
);