【发布时间】:2020-09-13 17:41:13
【问题描述】:
这是我的查询 -
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
【问题讨论】:
-
今日提示:始终使用现代、明确的
JOIN语法!更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接! -
轻松为您提供帮助,向我们展示一些示例表数据、当前结果和想要的结果 - 全部为格式化文本(无图像)。minimal reproducible example
-
您将其标记为 mysql 并参考有关 sql server 的链接,它们是不同的 rsms,因此无法以相同的方式做出反应。请添加minimal reproducible example,以便我们更好地了解您的问题
-
选择列表 case 表达式不过滤。请改用 JOIN ... ON。
-
我已经尝试过使用 join @jarlh。我还用我希望结果的示例更新了我的帖子。这是我所做的连接:“从 Pasta P1 JOIN 中选择不同的 P1.PastaName, P1.PastaColor (SELECT S1.SauceType from Sauce S1) as Italian”。 Pasta 和 Sauce 都有一个它们之间共有的 ID 属性。但是,如果我使用 ON 将它们设置为彼此相等,则会出现错误。使用当前的连接语句,不会显示 SauceType。是的,如果没有匹配项,我确实希望显示 null。