У меня есть две таблицы, A и B.
Оба имеют одинаковые столбцы.
Мне нужно выбрать все элементы в Таблице A, которые НЕ в Таблице B.
Это пересечение, верно? Как я могу это сделать?
при условии, что TableA и TableB имеют первичный ключ с идентификатором имени.
select TableA.* from TableA left outer join TableB on TableB.id = TableA.id where TableB.id is null;
При этом будут найдены все записи, в которых таблица b не имеет экземпляра идентификатора таблицы a.
Вы можете использовать предложение EXISTS
SELECT * FROM TableA WHERE NOT Exists ( SELECT Column1 FROM TableB WHERE TableA.Column1 = Table2.Column1 AND TableA.Column2 = Table2.Column2 .... )
Заменить .... остальными столбцами в двух таблицах.
SELECT ColumnA, ColumnB FROM TableA EXCEPT SELECT ColumnA, ColumnB FROM TableB
У вас неверная терминология. Пересечение - это строки, которые находятся как в Таблице A, так и в Таблице B. На самом деле вы ищете относительное дополнение для A и B. Чтобы получить относительное дополнение, которое вы хотите сделать противодействие :
SELECT * FROM TableA EXCEPT SELECT * FROM TableB.
или НЕ В
SELECT * FROM TableA WHERE TableA.Id NOT IN (SELECT TableB.Id FROM TableB)