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....