加入两个表来获得完全匹配

时间:2017-07-31 20:48:52

标签: sql join sql-server-2012

我有一个包含1000条记录的表和一条包含999条的表。表结构看起来像这样......

TBL1

 RecNo             ClietID         FName          LName
 1                 177             bob            doe

tbl2

 recNo2            ClientID          fName       Lname
 1                 177               bob         doe

结构非常相似,一个是所有客户端的主表,另一个是所有DELeted客户端的表。我正在尝试加入这两个表,所以它向我展示了目前不在tbl2中的tbl1中的记录....任何想法?

2 个答案:

答案 0 :(得分:2)

另一种选择;如果您知道Tab1的记录总是超过Tab2且其列/数据结构相同,并且您使用所有列来表示唯一性,那么您也可以执行以下内容:

Select * From Tab1
Except
Select * From Tab2

答案 1 :(得分:1)

返回任何一个表中不存在的记录。 假设clientID和recNo定义了唯一的记录。 使用带有空键检查的完全外连接应该可以正常工作

SELECT A.*, B.*
FROM tbl1 A
FULL OUTER JOIN tbl2 B
 on A.RecNo = b.RecNo
and A.ClientID = B.ClientId
WHERE (A.ClientID is null and A.RecNo is null)
  or (B.ClientID is null and B.RecNo is null)

如果我们知道事实,tab2记录较少,因此我们想检查tab1中是否存在删除记录,我们可以使用不存在...

SELECT *
FROM tab1 A
WHERE NOT EXISTS (SELECT * 
                  FROM tab2 B
                  WHERE A.ClientID = B.ClientID 
                    and A.RecNo= B.recNO)