查找两个表的内连接上没有连接的所有记录?

时间:2016-07-27 14:07:08

标签: sql-server join inner-join

我有一个内部联接的SQL Server查询...

SELECT * 
FROM tableA 
INNER JOIN tableB on tableA.my_id = tableB.my_id

如何找到此联接中不匹配的所有记录?

3 个答案:

答案 0 :(得分:3)

您可以使用FULL JOIN组合这两个表,然后使用WHERE子句通过检查每个表主键值中的NULL来将结果过滤到只有不匹配的行。

  

完全外部联接包括所有联接表中的所有行,无论它们是否匹配。

SELECT a.pk, b.pk
FROM tableA a 
FULL JOIN tableB b ON a.pk=b.fk
WHERE
    a.pk IS NULL 
    OR b.pk IS NULL

答案 1 :(得分:0)

SELECT A2.* FROM TableA A2 
              WHERE A2.my_id NOT IN 
                       (Select tableA.my_id FROM 
                                     tableA 
                                     inner join 
                                     tableB 
                                     on tableA.my_id = tableB.my_id)

您可以类似地执行上述开始SELECT B2.* FROM TableB B2,以便单独查询表B中不匹配的记录

  • 如果你想要一个表中的所有记录,你可以UNION ALL两个查询,这取决于表字段结构是否相同或者你如何指定你选择的字段 - 你在做什么数据?

答案 2 :(得分:0)

SELECT * FROM tableA其中my_id NOT IN(从tableB中选择my_id)
UNION ALL
SELECT * FROM tableB其中my_id NOT IN(从tableA中选择my_id)