如何在Oracle中基于一个具有空值的列从两个不同的列中进行选择

时间:2018-12-23 10:54:03

标签: sql oracle oracle11g

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

表名

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

Table City

  ID     Name
  1       A
  2       b
  3       C

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

结果

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

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

3 个答案:

答案 0 :(得分:1)

以这种方式使用correlated subquery

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

您还可以使用LEFT JOIN:

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 |

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您可以在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