我們正在使用Azure SQL資料庫。我們有兩個類似的表,其中包含重復的行,我想獲得這些表之間的差異,并將其存盤在第三個表中,重復的行也應被加載。
如果我使用EXCEPT,它只加載唯一的行。
我怎樣才能用SQL命令來評估這個問題?我不希望使用存盤程序來獲得結果。
下面是一個問題的例子
輸入表:
表A
AppName Creation Time Completion Time Status
--------------------------------------------------
應用程式A 8//2020 8/9/2020 完成
應用A 8/82020 8/9/2020 完成
應用B 8//2020 8/9/2020 完成
應用B 8//2020 8/9/2020 完成
應用C 8/9/2020 8/10/2020 完成
應用C 8/9/2020 8/10/2020 完成
應用D 8/10/2020 8/11/2020 完成
表B
AppName Creation Time Completion Time Status
--------------------------------------------------
應用B 8//2020 8/9/2020 完成
應用B 8//2020 8/9/2020 完成
應用C 8/9/2020 8/10/2020 完成
應用C 8/9/2020 8/10/2020 完成
應用D 8/10/2020 8/11/2020 完成
應用E 8/10/2020 8/11/2020 完成
應用E 8/10/2020 8/11/2020 完成
應用F 8/11/2020 8/12/2020 完成
應用F 8/11/2020 8/12/2020 完成
預期輸出:
表B減去A:
AppName Creation Time Completion Time Status
---------------------------------------------------
應用E 8/10/2020 8/11/2020 完成
應用E 8/10/2020 8/11/2020 完成
應用F 8/11/2020 8/12/2020 完成
應用F 8/11/2020 8/12/2020 完成
表A減去B:
AppName Creation Time Completion Time Status
---------------------------------------------------
應用程式A 8//2020 8/9/2020 完成
應用A 8/82020 8/9/2020 完成
uj5u.com熱心網友回復:
Azure sql上支持CTE函式,使用此函式并排除匹配記錄。
;with cte_excl
As (
Select distinct a.appname
From tableA a
Join tableB b on a.appname = b.appname
)
選擇 a.*的應用程式。
From ( select * from TableA union all select * from tableB )a
Left Join excl e on a.appname=e.appname
Where e.appname is null
uj5u.com熱心網友回復:
我認為你在追求以下結果--獲得不存在的行,將A與B和B與A進行比較,然后將結果聯合起來:
select *
from ta
where not exist (
select * from tb
where tb.appname=ta.appname
and tb.creation=ta.creation
and tb.completion=ta.completion
and tb.status=ta.status
)
unionall
select *
from tb
where not exists (
select * from ta
where ta.appname=tb.appname
and ta.creation=tb.creation
and ta.completion=tb.completion
and ta.status=tb.status
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323119.html
標籤:

