簡體   English   中英

SQL 案例 - 即使其他條件為真,也訪問了其他條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM