在Acqua Data Studio中管理的Postgres数据库几乎没有问题:
我需要一个解决方案来创建一个将多个视图连接到一个表中的SELECT。有10多个视图。
一个中心可以有多个ID,一个ID可以有多个中心。所以,主表的PK将是中心ID的事情。
应用的一个例子(假设仅存在3个表),如下:
视图1:
central | ID | MAP
--------------------------------
A | 01 | MAP1
A | 02 | MAP1
A | 03 | -
B | 01 | MAP3
B | 02 | -
C | 01 | -
视图2:
central | ID | CAMEL
--------------------------------
A | 01 | CAP1
B | 01 | CAP1
B | 02 | CAP2
B | 03 | CAP3
D | 01 | -
视图3:
central | ID | NRRG
--------------------------------
A | 01 | NRRG2
B | 01 | -
C | 01 | -
D | 05 | NRRG1
.
.
.
结果表:
central | ID | MAP | CAMEL | NRRG
--------------------------------------------------
A | 01 | MAP1 | CAP1 | NRRG2
A | 02 | MAP1 | |
A | 03 | - | |
B | 01 | MAP3 | CAP1 | -
B | 02 | - | CAP2 |
B | 03 | | CAP3 |
C | 01 | - | | -
D | 01 | | - |
D | 05 | | | NRRG1
任何出现在10+个表中的中心ID都需要在连接的表中输入。
我当然不在乎那些没有对应其他栏目的空白。。。
重要的是在每个ID中心行中获取其他表中存在的每个对应值。PS:“-”是一个值!
我考虑了一个完整的外部连接,但在手册中的引用,我看不出一个完美的方法。。。
谢谢,伙计们!
最佳答案
select central, id, map, camel, nrrg
from
v1
full outer join
v2 using (central, id)
full outer join
v3 using (central, id)
order by central, id
;
central | id | map | camel | nrrg
---------+----+------+-------+-------
A | 1 | MAP1 | CAP1 | NRRG2
A | 2 | MAP1 | |
A | 3 | | |
B | 1 | MAP3 | CAP1 |
B | 2 | | CAP2 |
B | 3 | | CAP3 |
C | 1 | | |
D | 1 | | |
D | 5 | | | NRRG1