代码之家  ›  专栏  ›  技术社区  ›  NuCradle

如何处理SQL语句中的非现有记录?

  •  1
  • NuCradle  · 技术社区  · 7 年前

    SELECT 从它的 CASE/WHEN/ELSE 声明,例如。

    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列 H.COLH 是“N”。

    添加 WHEN H.COLH IS NULL 选择 在另一个 SELECT... FROM DUAL 和另一个 案例/时间/其他 ,但它返回多个值。

    无效的 值为“N”,即使在 TBLH TBLH.COLH )?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    我会这样写:

    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

        2
  •  1
  •   Nick SamSmith1986    7 年前

    您可以将子查询包装为 COALESCE :

    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 */