在 Acqua Data Studio 中管理的 Postgres 数据库上的小问题:
我需要一个解决方案来创建一个 SELECT 将多个 View 连接到一个表中。有 10 多个 View 。 一个central可以有多个id,一个id可以有多个central。因此,主表的 PK 将是中心 ID。
适用的一个例子(假设只存在3张表),如下:
View 1:
central | ID | MAP
--------------------------------
A | 01 | MAP1
A | 02 | MAP1
A | 03 | -
B | 01 | MAP3
B | 02 | -
C | 01 | -
View 2:
central | ID | CAMEL
--------------------------------
A | 01 | CAP1
B | 01 | CAP1
B | 02 | CAP2
B | 03 | CAP3
D | 01 | -
View 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+表中的任何central-ID都需要输入到连接表中。
我当然不关心那些没有对应其他列的列上的空格......
重要的是在每个 ID 中心行中获取其他表中存在的每个对应值。 PS:“-”是一个值!
我考虑过 FULL OUTER JOIN,但是根据手册中的引用,我看不到完美的方法...
谢谢,伙计们!
最佳答案
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
关于sql - Postgres 上的 JOIN 解决方案有很多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22670659/