在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:“-”是一个值!
我考虑了一个完整的外部连接,但在手册中的引用,我看不出一个完美的方法。。。
谢谢,伙计们!

最佳答案

SQL Fiddle

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

10-06 13:01
查看更多