Подтвердить что ты не робот

Sql: проверьте, существует ли запись в таблице A в таблице B

У меня есть таблица определений, которая, как я знаю, не поддерживается очень хорошо, давайте назовем это 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, где идентификатор НЕ существуют вообще в таблице А.

4b9b3361

Ответ 1

SELECT *
FROM   B
WHERE  NOT EXISTS (SELECT 1 
                   FROM   A 
                   WHERE  A.ID = B.ID)

Ответ 2

Если вы настроены на использование EXISTS, вы можете использовать ниже в SQL Server:

SELECT * FROM TableB as b
WHERE NOT EXISTS
(
   SELECT * FROM TableA as a
   WHERE b.id = a.id
)

Ответ 3

Классический ответ, который работает почти в каждой среде,

SELECT ID, Name, blah, blah
FROM TableB TB
LEFT JOIN TableA TA
ON TB.ID=TA.ID
WHERE TA.ID IS NULL

иногда НЕ СУЩЕСТВУЮЩИЕ могут быть не реализованы (не работают).

Ответ 4

Или если "НЕ СУЩЕСТВУЮТ" не реализованы

SELECT *
FROM   B
WHERE (SELECT count(*)  FROM   A WHERE  A.ID = B.ID) < 1