Вот синтаксис для нескольких таблиц:
WHERE NOT EXISTS (...) AND NOT EXISTS (...) AND NOT EXISTS (...)
Однако, если база данных настолько велика, что вы заботитесь о производительности, вам понадобится гораздо менее очевидный синтаксис в следующих строках:
LEFT JOIN Some_Table t ON (t.xxx = Main_Table.xxx)
LEFT JOIN Another_Table t2 ON (t2.xxx = Main_Table.xxx)
LEFT JOIN Yet_Another_Table t3 ON (t3.xxx = Main_Table.xxx)
...
WHERE t.id IS NULL AND t2.id IS NULL AND t3.id IS NULL
Для одной таблицы и одного составного условия, как в примере SQL в вашем вопросе:
LEFT JOIN Some_Table t ON
t.xxx = Main_Table.xxx
AND t.yyy = Main_Table.yyy
AND t.zzz = Main_Table.zzz
WHERE t.id IS NULL
Ожидается, что он вернет строки, которые существуют в Main_Table, но не имеют совпадающих строк вSome_Table, предполагая, что столбцы xxx
и т. Д. Не могут быть обнуляемыми.
Если, например, xxx
обнуляем, вот как вам нужно изменить запрос далее:
LEFT JOIN Some_Table t ON
(t.xxx = Main_Table.xxx OR (t.xxx IS NULL AND Main_Table.xxx IS NULL))
AND t.yyy = Main_Table.yyy
AND t.zzz = Main_Table.zzz
WHERE t.id IS NULL