微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一旦我的条件在 postgresql

如何解决一旦我的条件在 postgresql

我在 postgresql 中使用 case 语句并且有 4 个“when”条件,我希望一旦条件变为真,它就应该退出 case 语句。假设我有 4 个“when”条件,并且如果第一个语句为真,则当 case 运行时,不要激发剩余的 3 个条件。

还假设如果第一个条件为假,则进入下一个,如果下一个为真,则退出

enter image description here

上图就像我的配置表,如果它与我的其他表匹配,我必须从中选择 col6 值。

例如 col1、col2、col3 是必须匹配的,但 col4 和 col5 是可选的。因此,从我的实际数据集中,如果 col1、col2 和 col3 匹配,那么我必须检查 col5 和 col4 是否也匹配,优先选择 col5。

假设 col1,col2,col3 匹配,然后如果只有 col5 匹配但在 col4 上,那么我必须从中获取值。 col1、col2、col3 也匹配,col5 和 col4 都匹配,因此我必须取值。

如果 col1、col2、col3 与我的主数据集匹配,而 col4 和 col5 不匹配,那么我必须从 col6 中获取值。

希望我很清楚,为此我正在写案例陈述

解决方法

CASE WHEN ... THEN 已经按照你的描述做了。匹配早期条件时,不会评估后面的条件。

编辑 根据您希望 CASE / WHEN / THEN 规则在查询中途更改的评论。但是,这不是 SQL 的工作方式:它是一种 declarative language,而不是命令式语言。你告诉 SQL 你想要什么,而不是如何得到它。

SQL 查询引擎以不可预测的顺序处理行。他们甚至可以并行处理多行。因此,请注意,在遇到特定行中的条件 之后 更改查询的概念是没有意义的,因为 after 在 SQL 的世界中毫无意义。 >

您可以使用 LEFT JOIN 来获得您想要的。像这样的东西。

SELECT DISTINCT
       a.col1,a.col2,a.col3,CASE
       WHEN b.col4 = a.col4 AND c.col5 = a.col5 THEN b.col4
       WHEN d.col6 = a.col6 THEN d.col6
       ELSE '???' END matched
  FROM tablea a
  LEFT JOIN tableb b ON a.col4 = b.col4
  LEFT JOIN tablec c ON a.col5 = c.col5
  LEFT JOIN tabled d ON a.col6 = d.col6
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。