Возникли проблемы с этим простым оператором SQL Select - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть две таблицы, A и B.

Оба имеют одинаковые столбцы.

Мне нужно выбрать все элементы в Таблице A, которые НЕ в Таблице B.

Это пересечение, верно? Как я могу это сделать?

Ответы [ 5 ]

6 голосов
/ 16 сентября 2009

при условии, что TableA и TableB имеют первичный ключ с идентификатором имени.

select TableA.* 
  from TableA 
left outer join TableB on TableB.id = TableA.id
where TableB.id is null;

При этом будут найдены все записи, в которых таблица b не имеет экземпляра идентификатора таблицы a.

4 голосов
/ 16 сентября 2009

Вы можете использовать предложение EXISTS

SELECT * FROM TableA
WHERE NOT Exists
(
SELECT Column1 FROM TableB 
WHERE TableA.Column1 = Table2.Column1 
AND TableA.Column2 = Table2.Column2 
....
)

Заменить .... остальными столбцами в двух таблицах.

2 голосов
/ 16 сентября 2009
SELECT ColumnA, ColumnB
FROM TableA
EXCEPT
SELECT ColumnA, ColumnB
FROM TableB
2 голосов
/ 16 сентября 2009

У вас неверная терминология. Пересечение - это строки, которые находятся как в Таблице A, так и в Таблице B. На самом деле вы ищете относительное дополнение для A и B. Чтобы получить относительное дополнение, которое вы хотите сделать противодействие :

SELECT * FROM TableA EXCEPT SELECT * FROM TableB.
1 голос
/ 16 сентября 2009

или НЕ В

SELECT *
FROM TableA
WHERE TableA.Id NOT IN (SELECT TableB.Id FROM TableB)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...