sql - 如何将不同表的多列合并到一个表中

标签 sql postgresql

我有三个表 a、b 和 c,需要将这些表数据安排为目标表,并且所有这些表(a、b、c)都不在数据库中,它们是使用查询作为别名从单个表中获取的,并且需要使用查询将这些表排列到目标表中。如何做到这一点

   table a     |      table b     |   table c     
               |                  |               
  id | a_vals  |     id | b_vals  |  id | c_vals  
  ------------ | --------------   | ------------- 
  1  |  123    |     1  |  123    |  1  |  123    
  2  |  124    |     2  |  142    |  2  |  142    
  3  |  234    |     4  |  234    |  5  |  234    

目标表

id | a_val| b_val| c_val
1  | 123  | 123  | 123
2  | 124  | 142  | 142
3  | 234  |  -   |  -
4  |  -   | 234  |  -
5  |  -   |      | 234

最佳答案

由于 a、b 和 c 对您要加入的列共享相同的名称,您可以使用“USING”来避免结果表中的重复键:

SELECT *
FROM a
FULL OUTER JOIN b USING (id)
  FULL OUTER JOIN c USING (id);

或者,由于 a、b 和 c 的值列都有不同的名称,您可以使用 NATURAL JOIN:

SELECT *
FROM a
NATURAL FULL OUTER JOIN b
NATURAL FULL OUTER JOIN c;

注意不要意外重命名任何其他列,因为自然连接会删除任何重复的列。 如果愿意,您也可以省略“OUTER”关键字,但为了清楚起见,我会保留它(因为 LEFT、RIGHT 和 FULL 表示外部连接)。 参见 https://www.postgresql.org/docs/10/static/queries-table-expressions.html详情

关于sql - 如何将不同表的多列合并到一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51283575/

相关文章:

postgresql - PostgreSQL 14/PostgREST 中策略的列级安全性?

SQL 计算一列包含两个不同值的唯一行

sql - 条件 AND OR 与 Drupal db_select

mysql - 如何查询数据库中的所有表

database - 小表查询一定数量的列是否比大表更快?

PostgreSQl pg_dump权限错误?

database - 当 Relay 游标分页总是获取整个数据集时,它如何处理大数据集?

带有 dblink 的 postgresql 触发器不返回任何内容

sql - 如何在 ormlite ( SQLite ) 中执行多列唯一约束

sql - PostgreSQL 数据库链接 : No function matches the given name and argument types