Я не уверен, что это работает без UNION ALL
. Например, все ответы здесь ( SQL слева объединяет две таблицы независимо ) работают с ним.
Итак, мое решение:
demo: db <>fiddle
SELECT
a.id,
b.val,
NULL
FROM
a
LEFT JOIN b ON a.id = b.id
UNION ALL
SELECT
a.id,
NULL,
c.val
FROM
a
LEFT JOIN c ON a.id = c.id
ORDER BY 1,2,3
Редактировать: Нашел способ, используя GROUPING SETS
:
демо: db <> fiddle
SELECT
ab.*,
c.val
FROM (
SELECT
a.id,
b.val
FROM a
LEFT JOIN b ON a.id = b.id
GROUP BY GROUPING SETS ((a.id), (a.id, b.val))
) ab
LEFT JOIN c ON ab.id = c.id AND ab.val IS NULL