我有2个查询以相同的格式返回数据(年 - 数据 - 来源) 我需要加入他们从q1获取数据,如果q1中没有年份则从q2获取。
示例:
Q1结果集:
Year - Data - Source
2014 - 325 - DS1
2015 - 500 - DS1
2016 - 450 - DS2
Q2结果集:
Year - Data - Source
2016 - 375 - DS4
2017 - 475 - DS4
预期结果集:
Year - Data - Source
2014 - 325 - DS1 --from q1
2015 - 500 - DS1 --from q1
2016 - 450 - DS2 --from q1
2017 - 475 - DS4 --from q2
答案 0 :(得分:1)
一种简单的方法是使用union all
和一些逻辑:
select q1.year, q1.data, q1.source
from q1
union all
select q2.year, q2.data, q2.source
from q2
where not exists (select 1 from q1 where q1.year = q2.year);
如果子查询很昂贵,您可能不想两次引用q1
。一种方法使用full join
:
select coalesce(q1.year, q2.year) as year,
coalesce(q1.data, q2,data) as data,
coalesce(q1.source, q2.source) as source
from q1 full outer join
q2
on q1.year = q2.year;
答案 1 :(得分:0)
这对你也有用,
Select * from Q1
Union (Select * from Q2 Where Year Not In (Select Year from Q1));