gpt4 book ai didi

带有条件 CASE 语句的 SQL LEFT JOIN

转载 作者:行者123 更新时间:2023-12-03 16:54:27 27 4
gpt4 key购买 nike

希望这是一个快速

SELECT *
FROM T
left JOIN J ON
CASE
WHEN condition1 THEN 1 --prefer this option even if CASE2 has a value
WHEN condition2 THEN 2
ELSE 0
END = 1 (edit: but if 1 does not satisfy, then join on 2)

两种情况都返回结果,但我希望 THEN 1 取代 THEN 2 并成为查找优先级

我可以让 SQL 做一些类似 join on max(CASE) 的事情吗? ?

基本上我试图从 Excel 复制嵌套的 INDEX/MATCH

编辑:我听到的是,案例应该在第一个返回的 TRUE 处停止,但是当我测试时它不会表现得那样
SELECT *
FROM T
left JOIN J ON
CASE
WHEN condition1 THEN 1 --prefer this option even if CASE2 has a value
WHEN condition2 THEN 1
ELSE 0
END = 1

有时似乎更喜欢 2nd THEN 1,但并非总是如此......我是否遗漏了什么会导致这种行为?

最佳答案

哪个条件导致行在连接中匹配并不重要。有正当理由使用 case连接中的表达式,但我认为您只想 or您的条件然后使用 case表达式输出匹配的排名原因。

SELECT *, CASE WHEN <condition1> THEN 1 WHEN <condition2> THEN 2 END as match_code
FROM T LEFT OUTER JOIN J ON <condition1> or <condition2>

我不知道如何描述 Excel 中的“嵌套索引/匹配”。如果我在上面的错误轨道上,那么您可能正在寻找嵌套的 case 表达式?

现在,如果您的条件将在不同行之间匹配,而您只想保留一个,那么...
WITH matches AS (
SELECT *, CASE WHEN <condition1> THEN 1 WHEN <condition2> THEN 2 END AS match_code
FROM T LEFT OUTER JOIN J ON <condition1> OR <condition2>
), ranked as (
SELECT *, MIN(match_code) OVER (PARTITION BY ???) AS keeper
FROM matches
)
SELECT ...
FROM ranked
WHERE match_code = keeper

关于带有条件 CASE 语句的 SQL LEFT JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33104449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com