我正构建一个查询,我尝试在其中进行独占的左连接但我找不到解决方案而不使用与union all一起放置的两个查询。
我的SQL没有按预期工作:
select link_table.key as lk_key, table_a.key as a_key, table_b.key as b_key
from link_table
left join table_a on (link_table.key = table_a.key_link_table)
left join table_b on (link_table.key = table_b.key_link_table)
我得到的结果是:
lk_key a_key b_key
123 abc xyz
456 def uvw
789 ghi NULL
我的解决方法:
select link_table.key as lk_key, table_a.key as a_key, null as b_key from link_table
left join table_a on (link_table.key = table_a.key_link_table)
union all
select link_table.key as lk_key, null as a_key, table_b.key as b_key from link_table
left join table_b on (link_table.key = table_b.key_link_table)
我得到的结果是什么,并希望第一个SQL执行:
lk_key a_key b_key
123 abc NULL
123 NULL xyz
456 def NULL
456 NULL uvw
789 ghi NULL
这可以在一个查询中使用吗?
答案 0 :(得分:0)
重新格式化问题:请使用代码将此内容放入此处。
select
link_table.key as lk_key,
table_a.key as a_key,
table_b.key as b_key
from link_table
left join table_a on
(link_table.key = table_a.key_link_table)
left join table_b on
(link_table.key = table_b.key_link_table)
我得到的结果是:
lk_key a_key b_key
123 abc xyz
456 def uvw
789 ghi NULL
通缉结果:
lk_key a_key b_key
123 abc NULL
123 NULL xyz
456 def NULL
456 NULL uvw
789 ghi NULL
我的解决方法
select * from link_table
left join
table_a on (link_table.key = table_a.key_link_table)
union all
select *
from link_table
left join table_b on
(link_table.key = table_b.key_link_table)
试试这个:
select
link_table.key as lk_key,
table_a.key as a_key,
table_b.key as b_key
from link_table
full outer join table_a on
(link_table.key = table_a.key_link_table)
full outer join table_b on
(link_table.key = table_b.key_link_table)
where a_key is NULL or
b_key is NULL
答案 1 :(得分:0)
union all
一个查询。这是一个由两部分组成的查询。
如果连接到两个表不会在第二个表中产生重复,您也可以这样做:
select link_table.key as lk_key, table_a.key as a_key, table_b.key as b_key
from link_table left join
table_a
on link_table.key = table_a.key_link_table left join
table_b
on link_table.key = table_b.key_link_table;
这并不完全等效,因为如果table_a
或table_b
中存在多个匹配项,则可能会产生重复项。但是,在你的情况下,它可能会做你想要的。