SQL-在SQL

时间:2016-05-31 11:25:38

标签: sql oracle join

我有一张如下表格,其中只有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

有人可以建议吗?我这两个案例的主要关键是(国家+年)。 如果有很多这样的表可能是什么解决方案?

感谢。

3 个答案:

答案 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);