sql - Postgres 上的 JOIN 解决方案有很多表

标签 sql database postgresql

在 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,但是根据手册中的引用,我看不到完美的方法...

谢谢,伙计们!

最佳答案

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

关于sql - Postgres 上的 JOIN 解决方案有很多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22670659/

相关文章:

sql - 在 Postgres 中的数组字段中搜索

mysql - sql:按大写过滤字符串结果

mysql - 为什么它没有给我独特的值(value)观

sql - 使用 Clustered ColumnStore Index 插入唯一值

mysql - 如何将 SQLite Core Data 数据库与远程 MySQL 数据库同步?

php - 尝试使用查询从数据库中过滤数据。为什么这行不通?

c# - 从数据库中表示树结构

sql - 如何在 PostgreSQL 中获得最多两位小数的百分比值?

node.js - 转义 PostgreSQL 字符串值

mysql - 在nodejs中编写多个sql查询