Ответ 1
SELECT *
FROM B
WHERE NOT EXISTS (SELECT 1
FROM A
WHERE A.ID = B.ID)
У меня есть таблица определений, которая, как я знаю, не поддерживается очень хорошо, давайте назовем это table A
. У меня есть другая таблица (назовем ее table B
), которая намного меньше и в идеале должна быть subset of table A
, но я знаю, что table A
несколько устарел и не содержит новых записей, находящихся в table B
.
Обратите внимание, что таблицы A и B имеют разные столбцы.
Table A:
ID, Name, blah, blah, blah, blah
Table B:
ID, Name
Я хочу, чтобы все строки в таблице B были такими, что идентификатор в таблице B не существует в таблице A. Таким образом, это не соответствует строке в таблице A, я хочу только строки в таблице B, где идентификатор НЕ существуют вообще в таблице А.
SELECT *
FROM B
WHERE NOT EXISTS (SELECT 1
FROM A
WHERE A.ID = B.ID)
Если вы настроены на использование EXISTS, вы можете использовать ниже в SQL Server:
SELECT * FROM TableB as b
WHERE NOT EXISTS
(
SELECT * FROM TableA as a
WHERE b.id = a.id
)
Классический ответ, который работает почти в каждой среде,
SELECT ID, Name, blah, blah
FROM TableB TB
LEFT JOIN TableA TA
ON TB.ID=TA.ID
WHERE TA.ID IS NULL
иногда НЕ СУЩЕСТВУЮЩИЕ могут быть не реализованы (не работают).
Или если "НЕ СУЩЕСТВУЮТ" не реализованы
SELECT *
FROM B
WHERE (SELECT count(*) FROM A WHERE A.ID = B.ID) < 1