首页 > 解决方案 > db2中sql查询中的case when子句

问题描述

我有一个 db2/AS400 数据库,我正在尝试执行以下查询:

SELECT *
FROM user
WHERE id IN (
    CASE 
     WHEN 1=1 THEN
        (SELECT id
        FROM user AS userInner
        WHERE userInner.salary < 10)
     ELSE
        (SELECT id
        FROM user AS userInner
        WHERE userInner.salary > 20)
    END
)

1=1 条件取决于其他条件,但对于这个简单的示例来说没关系。但是,我得到的错误如下:

SQL 错误 [21000]: [SQL0811] SELECT 多于一行的结果。

如何使用 case when 或其他方式来获得具有多个结果的 sql_statement 条件?

谢谢

标签: sqldb2-400

解决方案


我认为你不需要CASE
你可以这样做:

SELECT *
FROM user
WHERE id IN (
  SELECT id FROM user
  WHERE (1=1 AND userInner.salary < 10)
     OR (1<>1 AND userInner.salary > 20)
)

当然你必须1=1用你的实际情况和1<>1它的相反来替换。


推荐阅读