Объединение двух таблиц, в которых некоторые столбцы объединяются, а другие должны быть нулевыми - PullRequest
0 голосов
/ 01 июля 2018

Я чувствую, что на этот вопрос уже где-то ответили, но мои поиски не нашли ничего уместного Если кто-либо может дать ссылку на другой ответ, я могу принять это помеченное как дубликат и закрытое.


У меня есть три таких таблицы:

users(id)
things1(id, user_id, thing1_text)
things2(id, user_id, thing2_text)

Для целей данного примера предположим, что в таблице users есть только один пользователь с id из 1.

Допустим, things1 выглядит так:

id
1
2
user_id
1
1
thing1_text
im a thing 1
im a thing 1 too

А вещи2 выглядят так:

id
1
2
user_id
1
1
thing2_text
im a thing 2
im a thing 2 too

Я пытаюсь создать запрос, который будет возвращать это:

user_id
1
1
1
1
thing1_text
im a thing 1
im a thing 1 too
NULL
NULL
thing2_text
NULL
NULL
im a thing 2
im a thing 2 too

Моя первая, по общему признанию, наивная попытка выглядела так:

select users.id as user_id
     , things1.thing1_text
     , things2.thing2_text
from users
full outer join things1
    on things1.user_id = users.id
full outer join things2
    on things2.user_id = users.id;

Однако это не помещает NULL ни в одно из полей и вместо этого объединяет их все - что, я уверен, более склонный к SQL среди вас, вероятно, понял, когда вы читали запрос: D

Во всяком случае. Это где я нахожусь. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 01 июля 2018

Кажется, вы хотите union all. Начните с этого:

select user_id, thing1_text, thing2_text
from ((select user_id, thing1_text, NULL as thing2_text
       from things1 t1 join
            users u
            on t1.user_id = u.id
      ) union all
      (select user_id, NULL, thing2_text
       from things2 t2 join
            users u
            on t2.user_id = u.id
      )
     ) tt
order by user_id;
...