我有一张如下表格,其中只有2011年和2012年的数据:
country year value1
ABCD 2011 x1
ABCD 2012 x2
PQRS 2011 x3
PQRS 2012 x4
以及另一张表格,其中包含2010年至2014年的数据:
country year value2
ABCD 2010 y1
ABCD 2011 y2
ABCD 2012 y3
ABCD 2013 y4
ABCD 2014 y5
PQRS 2010 y6
PQRS 2011 y7
PQRS 2012 y8
PQRS 2013 y9
PQRS 2014 y10
我想要一个组合表如下:
country year value2 value1
ABCD 2010 y1 null
ABCD 2011 y2 x1
ABCD 2012 y3 x2
ABCD 2013 y4 null
ABCD 2014 y5 null
PQRS 2010 y6 null
PQRS 2011 y7 x3
PQRS 2012 y8 x4
PQRS 2013 y9 null
PQRS 2014 y10 null
有人可以建议吗?我这两个案例的主要关键是(国家+年)。 如果有很多这样的表可能是什么解决方案?
感谢。
答案 0 :(得分:1)
使用left join
:
select t2.*, t1.value1
from table2 t2 left join
table1 t1
on t2.country = t1.country and t2.year = t1.year;
如果第二个表没有重复第一个表中的行,则需要full outer join
(或某种union
)。但是,根据问题中的数据,left join
已足够(并且应具有更好的性能)。
答案 1 :(得分:1)
您要找的是FULL OUTER JOIN
:
SELECT COALESCE(t1.country, t2.country) AS country,
COALESCE(t1.year, t2.year) AS year
t1.value1, t2.value2
FROM table1 AS t1
FULL OUTER JOIN table2 AS t2
ON t1.country = t2.country AND t1.year = t2.year
答案 2 :(得分:0)
看起来你想要一个完整的外部联接:
select country, year, t1.value1, t2.value2
from table_1 t1
full outer join table_2 t2 using (country, year);