在多对多联结表中查找丢失的记录

时间:2019-01-24 14:27:55

标签: sql sql-server

我有一个多对多联结表,可以连接2个表:

table1

table1_id 
-----------
1
2
3

table2

table2_id
------------
A
B
C

join_table

table1_id   |   table2_id
------------|--------------
1           |  A
1           |  B
1           |  C
2           |  A
2           |  C
3           |  B

由于我要考虑所有组合,因此如何编写单个查询来查找联接表中缺少哪些记录。基本上,我需要一个查询来返回这些丢失的记录:

table1_id   |   table2_id
---------------------------
2           |  B
3           |  A
3           |  C

我觉得这应该很简单,但是我还没有弄清楚。

1 个答案:

答案 0 :(得分:7)

执行CROSS JOIN以获取所有可能的组合。然后使用EXCEPT删除现有组合。

select t1.table1_id, t2.table2_id
from t1 cross join t2
except
select table1_id, table2_id from join_table