我有一个多对多联结表,可以连接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
我觉得这应该很简单,但是我还没有弄清楚。
答案 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