Sql 连接两个表以获得精确匹配

Sql 连接两个表以获得精确匹配,sql,join,sql-server-2012,Sql,Join,Sql Server 2012,我有一张有1000条记录的表和一张有999条记录的表。表结构如下所示 tbl1 tbl2 结构非常相似,一个是所有客户端的主表,另一个是所有已删除客户端的表。我正在尝试连接两个表,因此它向我显示了tbl1中当前不在tbl2中的记录……知道吗?返回其中一个表中不存在的所有记录。 假设clientID和recNo定义了唯一的记录。 使用完整的外部联接并对键进行null检查应该是可行的 SELECT A.*, B.* FROM tbl1 A FULL OUTER JOIN tbl2 B on A.R

我有一张有1000条记录的表和一张有999条记录的表。表结构如下所示

tbl1

tbl2


结构非常相似,一个是所有客户端的主表,另一个是所有已删除客户端的表。我正在尝试连接两个表,因此它向我显示了tbl1中当前不在tbl2中的记录……知道吗?

返回其中一个表中不存在的所有记录。 假设clientID和recNo定义了唯一的记录。 使用完整的外部联接并对键进行null检查应该是可行的

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中记录的删除是否存在,我们可以使用not exists

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

返回其中一个表中不存在的所有记录。 假设clientID和recNo定义了唯一的记录。 使用完整的外部联接并对键进行null检查应该是可行的

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中记录的删除是否存在,我们可以使用not exists

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

另一种选择;如果您知道
Tab1
的记录总是比
Tab2
多,并且它们的列/数据结构相同,并且您使用所有列来表示唯一性,那么您还可以执行以下操作:

Select * From Tab1
Except
Select * From Tab2

另一种选择;如果您知道
Tab1
的记录总是比
Tab2
多,并且它们的列/数据结构相同,并且您使用所有列来表示唯一性,那么您还可以执行以下操作:

Select * From Tab1
Except
Select * From Tab2

是否要在两个表中查找记录,而不是在另一个表中?这些桌子的钥匙是什么?客户号?recNo?@xQbert是的,因此在本例中,请显示tbl1中的1条记录(其中有1000条记录),该记录在tbl2中没有完全匹配的客户端ID(其中有999条记录)。是否要在其中一个表中查找记录,而不是在另一个表中?这些桌子的钥匙是什么?客户号?recNo?@xQbert是的,所以在本例中,显示来自tbl1(其中有1000条记录)的1条记录,该记录在tbl2(其中有999条记录)中没有完全匹配的客户端ID。这样做了,谢谢-第二个就足够了-我正在做一些测试-所以我知道tbl2的记录比tbl1少一些。只是错过了
tab2
的别名和
中不存在的第二个括号,谢谢-第二个就足够了-我正在做一些测试-所以我知道tbl2的记录比tbl1少一些。刚刚错过了
tab2
的别名,而
不存在
中的第二个括号是queryeah tbl2有更多的列,但很高兴知道,我可以简单地手动添加它们。谢谢你!是的,tbl2有更多的列,但很高兴知道,我可以简单地手动添加它们。谢谢你!