gpt4 book ai didi

sql-server - 如何在 WHERE 子句中嵌套 CASE 语句并返回多个值

转载 作者:行者123 更新时间:2023-12-02 03:45:31 25 4
gpt4 key购买 nike

我正在使用的查询的表示如下。

SELECT T1.Col3
FROM Table1 T1
WHERE T1.Col1 IN ('Value1','Value2')
AND (CASE
WHEN T1.Col1 = 'Value1'
THEN T1.Col2 IN ('Value3','Value4','Value5')
WHEN T1.Col1 = 'Value2'
THEN T1.Col2 IN ('Value6','Value7','Value8')
END
)

出于某种原因,我总是在第二秒左右出现语法错误。我还在两个 IN 语句中的第一个逗号处遇到语法错误,但在第二个逗号处没有。并不是说它应该有所作为,我还尝试将嵌套 IN 语句更改为 OR 语句,如下所示:

THEN (T1.COL2 = 'Value3') OR (T1.COL2 = 'Value4') OR (T1.COL2 = 'Value5')

相反,我在第一个 OR 语句周围出现语法错误。

我之前在 WHERE 子句中使用过 CASE,但它只返回一个值。事实上,我在第一个逗号或 OR 语句处遇到语法错误,这让我怀疑返回多个值是不可能的。

如果您能对这个问题提出任何见解,我们将不胜感激。

附注我已经通过创建临时表并在其上运行条件 DELETE 语句来解决问题,这实现了我尝试使用上面的 CASE 语句实现的相同结果。不过,我很好奇,想知道这个问题涉及的其他方法是否可行。

最佳答案

您可以简化 WHERE 标准,如下所示:

SELECT T1.Col3
FROM Table1 T1
WHERE
(
(T1.Col1 = 'Value1' AND T1.Col2 IN ('Value3','Value4','Value5'))
OR
(T1.Col1 = 'Value2' AND T1.Col2 IN ('Value6','Value7','Value8'))
)

相同的查询可以使用 UNION 编写为 2 个单独的查询:

SELECT T1.Col3
FROM Table1 T1
WHERE T1.Col1 = 'Value1'
AND T1.Col2 IN ('Value3','Value4','Value5')

UNION -- note that this will return distinct results

SELECT T1.Col3
FROM Table1 T1
WHERE T1.Col1 = 'Value2'
AND T1.Col2 IN ('Value6','Value7','Value8')

但请注意,带有 OR 子句的 WHERE 可能会导致昂贵的查询计划。如果查询非常昂贵,则该查询的覆盖索引可能会有所帮助:

CREATE INDEX IX_Table1_Col1_Col2_Incl ON Table1 (Col1, Col2) INCLUDE (Col3)

关于sql-server - 如何在 WHERE 子句中嵌套 CASE 语句并返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46916160/

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