2013-12-16 2 views
9

Я использую SQL Server 2012.SQL Server - Нужна регистрация, но где НЕ равно

Я знаю, как сделать внутреннее соединение, которое дает тот, где есть совпадение. Мне также нужно получить записи, где не было соответствия.

Каков наилучший подход. Думаю, я могу сделать левое соединение и внутреннее соединение, а затем получить оставшиеся . Интересно, какой будет лучший и самый чистый подход.

Как уже упоминалось, я уже делаю внутреннее соединение, но также должен показывать записи, где не было соответствия.

+0

У вас есть код, который демонстрирует ваше мнение? –

+0

Вы хотите, чтобы все записи включали совпадающие и несоответствующие записи. Или вам нужны только не соответствующие записи? –

ответ

49

Возможно, вы ищете внешнее соединение или внешнее исключающее соединение.

OUTER JOIN

enter image description here

SELECT * 
FROM tableA a 
FULL OUTER JOIN tableB b 
    ON a.column = b.column 

НАРУЖНЫЙ ИСКЛЮЧАЯ РЕГИСТРИРУЙТЕСЬ

enter image description here

SELECT * 
FROM tableA a 
FULL OUTER JOIN tableB b 
    ON a.column = a.column 
WHERE a.column IS NULL OR b.column IS NULL 

sql joins

Графы в этом ответе взяты из этого очень полезного article.

+0

отсутствуют изображения –

1

Если вы хотите, чтобы получить значения из обеих таблиц, вы можете использовать полное внешнее соединение и принимать записи, которые имеют одну сторону на нуль:

select a.*, b.* from tableA a 
full outer join tableB b on a.col = b.col 
where a.col is null or b.col is null 

Очевидно, что этот способ все значения либо одной таблицы или другой будет null.

Смежные вопросы