Есть таблица A с полем id, есть таблица B тоже с полем id. Как получить все B.id, которых нет в A?
Так как заголовок данного поста включает в себя слово "понимание", то простым примером навроде:
SELECT B.id FROM B LEFT JOIN A ON (B.id=A.id) WHERE A.id IS NULL
ограничиваться не будем. Тем более, что можно еще и так:
SELECT B.id FROM B WHERE B.id NOT IN (SELECT A.id FROM A)
Для понимания: Команда Left Join создает виртуальную таблицу, на основе таблиц, указанных в условии. Проставляется связь между данными таблицами, однако, даже если в правой таблице не окажется соответствий левому ID, то данному полю при слиянии будет присвоено значение NULL.
Во втором примере показан простой вложенный SELECT
Результат обоих запросов будет одинаковым, но 2-й выполняется дольше.
Новые комментарии