失敗當前,要弄清楚什麼價值聯接在SQL我用下面的方法是SQL JOIN選擇值上
SELECT DISTINCT ACC.Name
,ACC.Area
,CASE
WHEN A.Area IS NULL AND N.Name IS NULL
THEN 'Name and Area do not match'
WHEN A.Area IS NULL
THEN 'Area does not match'
WHEN N.Name IS NULL
THEN 'Name is null'
ELSE
'Yes'
END as IsTopAccount
FROM Test.dbo.Accounts ACC
LEFT JOIN Test.dbo.TopAccounts A ON A.Area = ACC.Area
LEFT JOIN Test.dbo.TopAccounts N ON N.Name = ACC.Name
在上面的失敗上,帳戶必須加入到TopAccounts
表上區域和名稱。這兩個連接對我來說是必要的,以測試case語句中的每個條件。
是否可以更有效地測試case語句中的每個條件,也許有一個LEFT JOIN
而不是兩個獨立的LEFT JOIN
?
看到這個sql fiddle
您當前查詢的結果相同沒有意義對我說:如果沒有記錄'和'A.Area = ACC.Area' A' ,或者沒有記錄'N',其中'N.Name = ACC.Name',那麼是不是100%保證沒有記錄'P',其中'P.Area = ACC.Area AND P.Name = ACC .Name'? (你是否真的在結果集中看到'Area不匹配'或者'Name是null')所以你的查詢看起來就像是你去除了第二個和第三個WHEN表達式時所得到的結果和第二個和第三個'LEFT JOIN's。 – ruakh 2013-02-21 17:37:58
@ruakh謝謝,我沒有注意到,請參閱最新的查詢和sql提琴 – stevebot 2013-02-21 23:25:52