两个表的区别

Rho*_*nda 2 sql-server t-sql except

我试图找出两个表之间的差异,每个表都在不同的数据库中。我以为我可以做一个完整的外连接,但我得到的结果太多了。

下面的 T-SQL 返回 167 个结果

SELECT N'{'+ADobjectGUID+N'}' [GUID], first_name [First], last_name [Last], description [Full] FROM [db1].[dbo].[tb1] where delete_date is null
except
SELECT ObjectGUID [GUID], GivenName [First], sn [Last], displayName [Full] FROM [db2].[dbo].[tb1]
Run Code Online (Sandbox Code Playgroud)

当我将其反转为以下时,它返回 214 个结果

SELECT ObjectGUID [GUID], GivenName [First], sn [Last], displayName [Full] FROM [db2].[dbo].[tb1]
except
SELECT N'{'+ADobjectGUID+N'}' [GUID], first_name [First], last_name [Last], description [Full] FROM [db1].[dbo].[tb1] where delete_date is null
Run Code Online (Sandbox Code Playgroud)

但是,我需要的不仅仅是数据库中的那些列,因此我无法使用该except语句。

select N'{'+ADobjectGUID+N'}' [GUID], first_name [First], last_name [Last], db1.dbo.tb1.description [Full], domain_user_id, sAMAccountName, employeeID 
from db1.dbo.tb1
full outer join [db2].[dbo].[tb1]
on ObjectGUID = N'{'+ADobjectGUID+N'}'
    and first_name = GivenName
    and last_name = sn
    and tb1.description = displayName
where db1.dbo.tb1.delete_date is null
Run Code Online (Sandbox Code Playgroud)

该查询产生 1784 个结果。基于以上,我应该得到 371 个结果。我错过了什么。我对 SQL 还是个新手,我确信它很小。

ype*_*eᵀᴹ 5

FULL连接可能很棘手。试试这个版本:

select
    -- columns from db1 
    a_GUID = a.ObjectGUID,
    a_First = a.first_name, 
    a_Last = a.last_name, 
    a_Full = a.description, 
    a.domain_user_id, 
    a.sAMAccountName, 
    a.employeeID,

    -- columns from db2
    b_GUID = N'{' + b.ADobjectGUID + N'}',  
    b_First = b.GivenName, 
    b_Last = b.sn, 
    b_Full = b.displayName, 
from 
    ( select * 
      from db1.dbo.tb1 as a 
      where a.delete_date is null
    ) as a
  full outer join 
    db2.dbo.tb1 as b
  on 
      a.ObjectGUID = N'{' + b.ADobjectGUID + N'}'
  and a.first_name = b.GivenName
  and a.last_name = b.sn
  and a.description = b.displayName
where 
      a.ObjectGUID is null
   or b.ADobjectGUID is null
  ; 
Run Code Online (Sandbox Code Playgroud)