Объединение таблиц SQL Server - PullRequest
3 голосов
/ 21 января 2010

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

Пример:

LeftTable

  • leftID |PK
  • значение |

RightTable

  • rightID | PK
  • leftID | FK

    выберите l.value

    из LeftTable l

    присоединиться к RightTable r

    для l.leftID = r.leftID

Я знаю, что это не даст мне то, что я хочу, но я просто пытаюсь выяснить, какие элементы в левой таблице НЕ появляются в правой части, используя отношение внешнего ключа leftID.

Есть идеи?

Ответы [ 5 ]

11 голосов
/ 21 января 2010

Что если мы сделаем

select LT.value
from LeftTable LT
left outer join RightTable RT
on LT.leftID = RT.leftID
Where RT.leftId is null

SO join вернет все совпадения, а также те строки, которые находятся слева, но не справа. С помощью предложения where мы получаем только те строки, для которых левый идентификатор правой таблицы равен нулю.

5 голосов
/ 21 января 2010

У вас почти это есть, только пара небольших изменений - соединение должно быть левым, а не [INNER] JOIN, и вам нужно только возвращать строки, в которых отсутствует правая таблица, т. Е. Ее поля равны NULL :

SELECT T1.value
FROM LeftTable T1
LEFT JOIN RightTable T2
ON T1.leftID = T2.leftID
WHERE T2.leftID IS NULL
0 голосов
/ 21 января 2010

Альтернатива, использующая exists, вместо использования where not in. left outer join с проверкой нулевого состояния справа, вероятно, все еще оптимально.

select
        left.*
    from
        LeftTable as left
    where
        not exists (
            select
                    *
                from
                    RightTable as right
                where
                    right.RightID = left.LeftID
            )
0 голосов
/ 21 января 2010
SELECT LeftID
FROM LeftTable 
    LEFT OUTER JOIN RightTable ON LeftTable.LeftID = RightTable.LeftID
WHERE RightTable.RightId IS NULL
0 голосов
/ 21 января 2010

select * from LeftTable where leftID not in (select leftID from RightTable)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...