Соедините две таблицы, используя значение из первой, если оно не равно нулю, в противном случае используйте значение из второй - PullRequest
0 голосов
/ 28 октября 2019

У меня есть три таблицы, которые выглядят так:

ТАБЛИЦА 1

id    j_id

1     1
2     2
3     3

ТАБЛИЦА 2

id    j_id     table1_id

1     57       1
2     84       1
3     1        1
4     9        2
5     2        2

, и каждый j имеетзначение в третьей таблице

id    value

1     1abc
2     2bcd
3     3abc
57    57abc
84    84abc
9     9abc

Я пытаюсь написать запрос, который объединит таблицу 1 и таблицу 2 и использует значение J из третьей таблицы вместо j_id , но проблема в том, что я хочу использовать значение j из второй таблицы, если оно существует, и в противном случае использовать значение из первой таблицы.

длячтобы было понятнее, это мой результат запроса без использования третьей таблицы:

tbl1.j_id    tbl2.j_id

1            1
1            84
1            57
2            2
2            9
3            null

Я хочу, чтобы в результате конечного запроса использовалось значение j второй таблицы, если оно не равно нулю:

tbl1.j_id    tbl2.j_id    j_id

1            1            1abc
1            84           84abc
1            57           57abc
2            2            2abc
2            9            9abc
3            null         3abc

(Редактирование вопросов и заголовков более чем приветствуется, не были уверены, что их можно сформулировать ..)

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

Вы можете просто JOIN до table3 на COALESCE из table2.j_id и table1.j_id:

SELECT t1.j_id AS t1_j_id, t2.j_id AS t2_j_id, t3.value
FROM table1 t1
LEFT JOIN table2 t2 ON t2.table1_id = t1.id
JOIN table3 t3 ON t3.id = COALESCE(t2.j_id, t1.j_id)

Выход:

t1_j_id t2_j_id value
1       1       1abc
1       57      57abc
1       84      84abc
2       2       2bcd
2       9       9abc
3       null    3abc

Демо на dbfiddle

1 голос
/ 28 октября 2019

Одним из решений является left join table3 дважды:

select
    t1.j_id,
    t2.j_id,
    coalesce(t31.value, t32.value) j_value
from 
    table1 t1
    left join table2 t2 on t2.table1_id = t1.id
    left join table3 t31 on t31.id = t2.j_id
    left join table3 t32 on t32.id = t1.j_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...