2013-03-18 119 views
1

假设有以下三个PostgreSQL表要与公共ID列合并。合并大量表

table A 
ID V1 
2 100 
3 200 
4 250 

table B 
ID V2 
1 200 
3 140 

table C 
ID V3 
2 90 
3 100 
4 10 
5 200 

我想如下合并这三个表:

merged table 
ID V1 V2 V3 
1  200 
2 100  90 
3 200 140 100 
4 250  10 
5   200 

我感谢您的帮助!

回答

1

既然你想要的ID列只在结果一次,显而易见的选择将与USING子句的等值连接:

SELECT id, v1, v2, v3 
FROM a 
FULL OUTER JOIN b USING (id) 
FULL OUTER JOIN c USING (id) 

这种方式,你也不必COALESCE在所有 - 这会让很多桌子很快变得混乱。

-> SQLfiddle demo

1
select A.*,B.V2,C.V3 
    from 
    A 
    full outer join B on A.id = B.id 
    full outer join C on C.id = coalesce(A.id,B.id) 
+0

注 - 我没有测试过这个。 – alex 2013-03-18 20:57:01

+0

不太现实。它需要'COALESCE()'作为'id'。 – 2013-03-18 21:41:36