【问题标题】:How to select from two different columns based on one having a null value in oracle如何根据在 oracle 中具有空值的列从两个不同的列中进行选择
【发布时间】:2018-12-23 10:54:03
【问题描述】:

我在 Oracle 中有以下示例数据。

表名

 ID     Name       city
  1     Atik        1
  2     Tania       null
  3     Anabia      3

餐桌城市

  ID     Name
  1       A
  2       b
  3       C

如果表 NAME 中的值为空,我试图从表 CITY 中选择一个值,否则我想要 NAME 中的值。结果应如下所示:

结果

  ID     Name       city
  1     Atik        A
  2     Tania       null
  3     Anabia      B

这只有 3 列,但我有很多这样的列。

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    使用correlated subquery,这样:

    SELECT id, name,
           (SELECT Name FROM City c
            WHERE c.id = n.city ) as City
    FROM Name n
    

    你也可以使用左连接:

    SELECT n.id,
           n.name,
           c.name as city
    FROM Name n
    LEFT JOIN City c
    ON c.id = n.city
    

    演示:https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=600cdfc1cbf08b8bc2798229f02a3d96

    | ID |   NAME |   CITY |
    |----|--------|--------|
    |  1 |   Atik |      A |
    |  2 |  Tania | (null) |
    |  3 | Anabia |      C |
    

    【讨论】:

      【解决方案2】:

      使用NVL2 在表Name 中检查NULL 值:

      SELECT n.ID, n.Name, NVL2(n.city, c.Name, NULL) AS City
      FROM Name n LEFT JOIN City c 
      ON c.ID = n.city
      

      【讨论】:

        【解决方案3】:

        您可以在 ID 字段上使用左连接,然后使用 CASE 语句来选择您的值。它应该足够灵活,也可以帮助您处理其他专栏。

        SELECT
            n.ID,
            n.NAME,
            CASE WHEN n.CITY IS NULL THEN NULL ELSE c.NAME END AS CITY
        FROM
            NAME n LEFT JOIN CITY c ON n.ID = c.ID
        

        【讨论】:

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