【问题标题】:DB2 Case When Exists存在时的 DB2 案例
【发布时间】:2017-05-08 06:58:05
【问题描述】:

搜索一个表以查看它是否包含 X 如果它没有找到 X 我需要它返回 Y。这是我迄今为止尝试过的:

SELECT WHEN T1.X IS NULL THEN Y ELSE T1.X END AS XY 
FROM TABLE1 T1
LEFT JOIN TABLE2 T2 ON T1.X = T2.X
WHERE T1.X IN (A, B, C);

SELECT CASE WHEN T1.X IS NOT NULL THEN T1.X ELSE Y END AS XY
FROM TABLE1 T1
WHERE T1.X IN (A, B, C)
AND T1.X IN (
    SELECT T2.X
    FROM TABLE2 T2);

SELECT CASE WHEN EXISTS (SELECT X FROM TABLE1) THEN X ELSE Y END AS XY
FROM TABLE1 
WHERE X IN (A, B, C);

我在没有找到 A、B 或 C 而不是 Y 的地方返回 0 行。但如果它找到 A、B 或 C,它确实会正确返回 X。

【问题讨论】:

  • 您可能想要显示一些示例数据和预期的输出。现在还不完全清楚你想要实现什么。

标签: null db2 case exists


【解决方案1】:

简单的联合

SELECT X FROM TABLE1 WHERE X IN (A, B, C) 
UNION 
SELECT Y FROM SYSIBM.SYSDUMMY1 
WHERE NOT EXISTS (SELECT X FROM TABLE1 WHERE X IN (A, B, C))

【讨论】:

  • 谢谢!这样做了。
【解决方案2】:

我发现这适用于 DB2:

SELECT A, B, 
Case C
WHEN 'Citron' THEN 'Lemon'
WHEN 'Charlie' THEN 'Name'
end as Choice, 
D
FROM TABLE with UR;

也适用于 DB2 java 驱动程序。

【讨论】:

    【解决方案3】:

    这在 DB2 中用作记录存在性测试

    SELECT
      CASE COUNT(*)
        WHEN 0 THEN 'FALSE'
        ELSE 'TRUE'
      END as IsRecordThere
    FROM MYTABLE 
    WHERE COL1 = 'whatever' AND COL2 = 'etc'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多