Как показать отсутствующие записи - PullRequest
1 голос
/ 02 апреля 2020

У меня есть две таблицы, как показано ниже в SQL Server 2017:

Таблица X

XID Name
1  A
1  B
1  C
2  A
2  B 
3  C

Таблица Y

YID Name
1 A
2 B
3 C
4 D

Я хочу показать недостающие [Y]. [Имя] для каждого X-данных.

Ожидаемый результат

XID Name
1   D
2   C
2   D
3   A
3   B
3   D

Каков наилучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вы можете cross join список name с со списком (отличных) xid с, а затем отфильтровать пропущенные записи с помощью not exists:

select x.xid, y.name
from y
cross join (select disctinct xid from x) x
where not exists (select 1 from x x1 where x1.id = x.id and x1.name = y.name)
0 голосов
/ 02 апреля 2020

Это может быть немного неуклюжим, но вы можете соединить две таблицы, а затем вычесть из них эквиджоин:

SELECT     x.id, y.name
FROM       x
CROSS JOIN y
EXCEPT
SELECT     x.id, y.name
FROM       x
JOIN       y ON x.name = y.name
...