gpt4 book ai didi

sql-server - SQL Server 中 CASE 语句中的 IN 条件

转载 作者:行者123 更新时间:2023-11-29 12:51:52 24 4
gpt4 key购买 nike

我有一个查询要从 Postgres (10.1) 迁移到 Microsoft SQL Server (13.0)

在 Postgres 中工作的查询:

SELECT * 
FROM source
WHERE
1 = CASE
WHEN 234 NOT IN (SELECT user_id
FROM usergroup)
THEN SOURCE .source_id IN (SELECT DISTINCT sl.source_id
FROM sourcelevel SL)
ELSE 1
END

SQL Server 失败并显示此错误消息:

Msg 156, Level 15, State 1, Line 11
Incorrect syntax near the keyword 'IN'.

这个问题似乎源于在 CASE/WHEN/ELSE/END 中使用 IN 条件,因为如果我在进行查询时删除该构造:

SELECT * 
FROM source
WHERE
SOURCE .source_id IN (SELECT DISTINCT sl.source_id
FROM sourcelevel SL)

它执行没有错误。

在 SQL Server 的 CASE 语句中使用 IN 语法有什么技巧吗?

最佳答案

SQL Server 没有Boolean 数据类型。您可以改为重构为嵌套的 CASE 表达式,如下所示,返回 0 或 1:

SELECT * from source
WHERE
1 =
CASE WHEN 234 NOT IN(
SELECT
user_id
FROM
usergroup
)
THEN
CASE WHEN SOURCE.source_id IN(
SELECT DISTINCT
sl.source_id
FROM
sourcelevel SL

) THEN 1
ELSE 0
END

ELSE
1
END;

我认为这也可以在没有 CASE 的情况下进行重构,比如:

SELECT *
FROM source
WHERE 234 IN(
SELECT user_id
FROM usergroup
)
OR
SOURCE.source_id IN(
SELECT sl.source_id
FROM sourcelevel SL
);

关于sql-server - SQL Server 中 CASE 语句中的 IN 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52049217/

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