Соединение одной и той же таблицы дважды в одном запросе - PullRequest
0 голосов
/ 14 января 2019

У меня есть 3 таблицы, к которым я хочу присоединиться. Давайте назовем их A, B, C. Я хотел бы получить один и тот же результат этих двух запросов, но только с одним:

SELECT * FROM A JOIN B ON B.ext_id = A._id
SELECT * FROM A JOIN C ON C.ext_id = A._id

Кроме того, B.ext_id и C.ext_id не могут иметь одно и то же значение, что означает, что одно и то же значение A._id не может быть как в B.ext_id, так и в C.ext_id

Очевидно, этот запрос:

SELECT * FROM A JOIN B ON B.ext_id = A._id JOIN C ON C.ext_id = A._id

Возвращает ноль. Что я должен делать? Спасибо

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Этот запрос предоставит вам то, что вы ищете, и не покажет несоответствий, аналогично двум внутренним запросам на соединение, которые вы выполняли. Это должно работать и для дополнительных таблиц.

SELECT a.*, COALESCE(b.ext_id, c.ext_id) AS ext_id
FROM A
    LEFT JOIN B ON A._id = B.ext_id
    LEFT JOIN C ON A._id = C.ext_id
WHERE COALESCE(b.ext_id, c.ext_id) IS NOT NULL
0 голосов
/ 14 января 2019

Типичный метод использует left join и coalesce():

select a.*,
       coalesce(b.col1, c.col1) as col1
from a left join
     b
     on b.ext_id = a._id left join
     c
     on c.ext_id = a._id;

Используйте coalesce() для всех нужных столбцов из двух таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...