![](/img/trans.png)
[英]CASE WHEN SQL Query executes condition in else even if first condition is true
[英]SQL case - else condition visited even when other condition is true
這是我的查詢 -
Select distinct P1.PastaName, P1.PastaColor,
CASE
When
S1.SauceID = P1.PastaID
THEN S1.SauceType
ELSE NULL
END AS PastaCombo
From Pasta P1, Sauce S1
不管 Pasta ID 和 Sauce ID 是否匹配,我希望每個 Pasta 只返回一行。 然而,事實並非如此。 當 Pasta ID 和 Sauce ID 不匹配時,只有一行返回的 PastaCombo 值為 null。 但是,如果 Pasta ID 和 Sauce ID 匹配,則返回 Pasta 的兩行 - 一行表示“Pasta Combo”,另一行表示“null”。
這是為什么? 當匹配時如何將結果減少到一行並且只返回“Pasta Combo”而不是 null ?
根據這個 - https://dba.stackexchange.com/questions/43352/does-sql-server-case-statement-evaluate-all-conditions-or-exit-on-first-true-con - else 條件是僅在沒有真實條件時才訪問。 但是我這邊有一個真實的條件,所以我不確定為什么要訪問 else 條件。
這是我想要的結果
PastaName PastaColor SauceType
_________ __________ __________
Ravioli Brown Tomato
有了這個:
From Pasta P1, Sauce S1
你實際上做的是 2 個表的CROSS
連接,這意味着行的笛卡爾積。
我懷疑您想要的是LEFT
連接:
SELECT DISTINCT
P1.PastaName, P1.PastaColor,
CASE WHEN S1.SauceID IS NOT NULL THEN 'Pasta Combo' END AS PastaCombo
FROM Pasta P1 LEFT JOIN Sauce S1
ON S1.SauceID = P1.PastaID
或者在沒有連接的情況下使用EXISTS
:
SELECT DISTINCT
P1.PastaName, P1.PastaColor,
CASE WHEN (EXISTS SELECT 1 FROM Sauce S1 WHERE S1.SauceID = P1.PastaID) THEN 'Pasta Combo' END AS PastaCombo
FROM Pasta P1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.