即使其他条件为true,也访问了SQL else条件



这是我的查询-

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

不管意大利面ID和酱汁ID是否匹配,我预计每个意大利面只会返回一行意大利面。然而,事实并非如此。当Pasta ID和Sauce ID不匹配时,返回的PastaCombo值为空的意大利面只有一行。然而,如果Pasta ID和Sauce ID确实匹配,则返回的Pasta有两行,其中一行写着";Pasta Combo"以及一个说";空";。

为什么?当有匹配时,我如何将结果减少到一行;Pasta Combo"返回而不是null?

据此——https://dba.stackexchange.com/questions/43352/does-sql-server-case-statement-evaluate-all-conditions-or-exit-on-first-true-con-只有在没有真实条件的情况下,才会访问else条件。但我这边有一个真实的情况,所以我不知道为什么要去拜访其他情况。

这就是我想要的结果

PastaName           PastaColor       SauceType
_________           __________       __________
Ravioli              Brown           Tomato

使用此:

From Pasta P1, Sauce S1

实际上,您所做的是两个表的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

最新更新