Sql 在多对多连接表中查找丢失的记录
我有一个连接两个表的多对多连接表:Sql 在多对多连接表中查找丢失的记录,sql,sql-server,Sql,Sql Server,我有一个连接两个表的多对多连接表: table1_id ----------- 1 2 3 表1 table1_id ----------- 1 2 3 表2 table1_id ----------- 1 2 3 table2_id ------------ A B C 联接表 table1_id ----------- 1 2 3 table1_id | table2_id ------------|-------------- 1 | A 1
table1_id
-----------
1
2
3
表1
table1_id
-----------
1
2
3
表2
table1_id
-----------
1
2
3
table2_id
------------
A
B
C
联接表
table1_id
-----------
1
2
3
table1_id | table2_id
------------|--------------
1 | A
1 | B
1 | C
2 | A
2 | C
3 | B
如何编写一个查询来找出联接表中缺少哪些记录,因为我希望所有的组合都被考虑在内。基本上,我需要一个返回这些丢失记录的查询:
table1_id
-----------
1
2
3
table1_id | table2_id
---------------------------
2 | B
3 | A
3 | C
我觉得这应该很简单,但我还没有弄明白。做一个
交叉连接来获得所有可能的组合。然后使用EXCEPT
删除现有组合
table1_id
-----------
1
2
3
select t1.table1_id, t2.table2_id
from t1 cross join t2
except
select table1_id, table2_id from join_table
全部的这可能是用于多个联合ALL的错误吗?NoALL
根据(而不是文档错误—“不支持EXCEPT运算符的“ALL”版本。“如果尝试使用它,则会出错)@GeorgeMenoutis,可能是一个老习惯。。。我想这不重要,因为没有重复的行;正如达米恩所说,这是行不通的。(不知道SQL Server不支持除所有…)