我已經寫了兩個查詢來檢查兩個表之間的差異,如下所示。查詢2顯示正確的結果。這兩個查詢有什麼區別
在每個表格中都有一個不在另一箇中的記錄。所以我想要一個可以顯示這兩個記錄的查詢,查詢2所做的。它向我展示了表匹配的90行加上另外2行,其中一條記錄位於tblIH但不在tblTempN中,另一條記錄位於tblTempN但不在tblIH中。
而查詢1顯示我只有在表匹配共有90條記錄和一個額外的行,其中記錄是tblIH但不是在tblTempN - 但是這不表明我tblTempN記錄這是不是在tblIH - 爲什麼?我認爲使用完整的外連接會顯示兩個表中的所有記錄?我真的不明白兩個查詢之間的區別,因爲它們對我來說看起來是一樣的?
查詢1
select coalesce(h.Sedol, nav.Sedol) Sedol,
coalesce(nav.Name, h.Name) Name,
isnull(h.Nominal, 0) - isnull(nav.Nominal, 0) NomDiff
from tblIH h full outer join tblTempN nav
on h.Sedol = nav.Sedol and h.Code = nav.Code
where h.FundCode = 'ABC' and h.DatePrice = '2015-03-20'
查詢2
;with hld as
(
select Sedol, Name, FX, Nominal from tblIH
where DatePrice = '2015-03-20' and FundCode = 'ABC'
), nav as
(
select Sedol, Name, Nominal from tblTempN
where DateAcc = '2015-03-20' and FundCode = 'ABC'
)
select coalesce(hld.Sedol, nav.Sedol) Sedol,
coalesce(nav.Name, hld.Name) Name,
isnull(hld.Nominal, 0) - isnull(nav.Nominal, 0) NomDiff
from hld full outer join nav
on hld.Sedol = nav.Sedol
在第一個查詢中,在'tbletemp'表中沒有兩個條件'DateAcc ='2015-03-20'和FundCode ='ABC'',但在第二個查詢中,您在對應的'with'條款 –
'其中h.FundCode ='ABC'和h.DatePrice ='2015-03-20''是否可能? –
q1實際上是一個內部連接。 q2是全外連接。 – jarlh