SELECT-CASE-IN-SELECT error: [SQL0115] Comparison operator IN not valid. In query db2
SELECT-CASE-IN-SELECT error: [SQL0115] Comparison operator IN not valid. In query db2
我在 db2 查询中遇到问题
我试过运行这个查询
SELECT t.* ,
CASE WHEN column in (SELECT data FROM otherTable WHERE conditions...)
then 5
else 0
end as 'My new data'
FROM table t
WHERE conditions....
但是报错
[Error Code: -115, SQL State: 42601] [SQL0115] Comparison operator IN not valid.
当我将子查询更改为这样的 where 语句时
SELECT t.*
FROM table t
WHERE column in (SELECT data FROM otherTable WHERE conditions...)
工作正常
为什么在 case 语句中不起作用?这是 db2 的限制?
并且可以做出等效的行为?
一种方法是左连接到 table 并检查它是否不为空。
在大多数情况下,这将是最快的方法,因为 SQL 服务器经过优化可以非常快速地执行连接(但取决于许多因素,包括数据模型、索引、数据大小等)。
像这样:
SELECT t.* ,
CASE WHEN othertable.data is not null
then 5
else 0
end as 'My new data'
FROM table t
left join otherTable ON otherTable.column = data
WHERE conditions....
尝试使用 exists
条件,如下所示(将列值放在子查询的 where 子句中):
SELECT t.* ,
CASE WHEN exists (SELECT data FROM otherTable WHERE conditions... and column=val)
then 5
else 0
end as 'My new data'
FROM table t
WHERE conditions....
我在 db2 查询中遇到问题
我试过运行这个查询
SELECT t.* ,
CASE WHEN column in (SELECT data FROM otherTable WHERE conditions...)
then 5
else 0
end as 'My new data'
FROM table t
WHERE conditions....
但是报错
[Error Code: -115, SQL State: 42601] [SQL0115] Comparison operator IN not valid.
当我将子查询更改为这样的 where 语句时
SELECT t.*
FROM table t
WHERE column in (SELECT data FROM otherTable WHERE conditions...)
工作正常
为什么在 case 语句中不起作用?这是 db2 的限制?
并且可以做出等效的行为?
一种方法是左连接到 table 并检查它是否不为空。
在大多数情况下,这将是最快的方法,因为 SQL 服务器经过优化可以非常快速地执行连接(但取决于许多因素,包括数据模型、索引、数据大小等)。
像这样:
SELECT t.* ,
CASE WHEN othertable.data is not null
then 5
else 0
end as 'My new data'
FROM table t
left join otherTable ON otherTable.column = data
WHERE conditions....
尝试使用 exists
条件,如下所示(将列值放在子查询的 where 子句中):
SELECT t.* ,
CASE WHEN exists (SELECT data FROM otherTable WHERE conditions... and column=val)
then 5
else 0
end as 'My new data'
FROM table t
WHERE conditions....