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 还是个新手,我确信它很小。
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)
| 归档时间: |
|
| 查看次数: |
2957 次 |
| 最近记录: |