我有三个表 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/