我有三个表 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句