首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在CASE WHEN SQL语句中处理不存在的记录?

如何在CASE WHEN SQL语句中处理不存在的记录?
EN

Stack Overflow用户
提问于 2018-08-14 07:34:41
回答 2查看 85关注 0票数 1

我正在尝试基于从其CASE/WHEN/ELSE语句返回值的SELECT来更新列的值,例如

代码语言:javascript
复制
UPDATE TBL T
SET T.COL1 = (
  SELECT
    CASE
      WHEN H.COLH = 'XY' THEN 'Y'
      ELSE 'N'
    END
  FROM HTBL H
  WHERE T.ID = H.ID
    AND /* Other conditions */
)
WHERE T.RN = 100
  AND /* Other conditions */

问题是,如果HTBL表中不存在该记录,则不会将任何值分配给T.COL,因此T.COL仍为NULL。在这种情况下,我只想在T.COL的实际值为'N‘时将H.COLH设置为'N’。

添加WHEN H.COLH IS NULL不起作用。我尝试将整个SELECT包装在另一个SELECT... FROM DUAL和另一个CASE/WHEN/ELSE中,但它返回多个值。

有没有一种方法可以将NULL的值视为'N‘,即使TBLH中没有记录(更不用说TBLH.COLH了)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-14 07:58:39

我会这样写:

代码语言:javascript
复制
UPDATE TBL T
    SET T.COL1 = (CASE WHEN EXISTS (SELECT 1
                                    FROM HTBL H
                                    WHERE T.ID = H.ID AND
                                          /* Other conditions */ AND
                                          H.COLH = 'XY'
                                   )
                       THEN 'Y' ELSE 'N'
                  END)
WHERE T.RN = 100 AND
      /* Other conditions */

我认为EXISTS也能更好地捕捉到你想要的逻辑。

票数 1
EN

Stack Overflow用户

发布于 2018-08-14 07:38:13

您可以将子查询包装在COALESCE

代码语言:javascript
复制
UPDATE TBL T
SET T.COL1 = COALESCE( (
  SELECT
    CASE
      WHEN H.COLH = 'XY' THEN 'Y'
      ELSE 'N'
    END
  FROM HTBL H
  WHERE T.ID = H.ID
    AND /* Other conditions */
), 'N')
WHERE T.RN = 100
  AND /* Other conditions */
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51831877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档