连接两个表,其中某些列合并而其他列必须为空
Joining two tables where some columns merge and others must be null
我觉得这个问题一定已经在某个地方得到了回答,但我的搜索没有找到任何相关的东西。如果有人能够 link 另一个答案,我可以接受它被标记为重复并关闭。
我有三个这样的table:
users(id)
things1(id, user_id, thing1_text)
things2(id, user_id, thing2_text)
为了本示例的目的,假设 users
table 中只有一个用户的 id
为 1
。
假设 things1
看起来像这样:
id
1
2
user_id
1
1
thing1_text
im a thing 1
im a thing 1 too
things2 看起来像这样:
id
1
2
user_id
1
1
thing2_text
im a thing 2
im a thing 2 too
我正在尝试创建 return 这个查询:
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
总之。这就是我所在的地方。任何帮助都将不胜感激。
你似乎想要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;
我觉得这个问题一定已经在某个地方得到了回答,但我的搜索没有找到任何相关的东西。如果有人能够 link 另一个答案,我可以接受它被标记为重复并关闭。
我有三个这样的table:
users(id)
things1(id, user_id, thing1_text)
things2(id, user_id, thing2_text)
为了本示例的目的,假设 users
table 中只有一个用户的 id
为 1
。
假设 things1
看起来像这样:
id
1
2
user_id
1
1
thing1_text
im a thing 1
im a thing 1 too
things2 看起来像这样:
id
1
2
user_id
1
1
thing2_text
im a thing 2
im a thing 2 too
我正在尝试创建 return 这个查询:
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
总之。这就是我所在的地方。任何帮助都将不胜感激。
你似乎想要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;