Как выбрать из двух разных столбцов на основе одного, имеющего нулевое значение в Oracle - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть следующие примеры данных в Oracle.

Имя таблицы

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

Таблица города

  ID     Name
  1       A
  2       b
  3       C

Я пытаюсь выбрать значение из таблицы CITYесли значение в таблице NAME является нулевым, в противном случае я хочу значение в NAME.Результат должен выглядеть следующим образом:

Результат

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

Это только 3 столбца, но у меня много таких столбцов.

Ответы [ 3 ]

0 голосов
/ 23 декабря 2018

Вы можете использовать левое соединение в поле идентификатора, а затем использовать оператор 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
0 голосов
/ 23 декабря 2018

Используйте 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
0 голосов
/ 23 декабря 2018

Используйте коррелированный подзапрос , таким образом:

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 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...