Postgresql:如何逐行连接表?
Posted
技术标签:
【中文标题】Postgresql:如何逐行连接表?【英文标题】:Postgresql: How to concat table by row? 【发布时间】:2010-11-24 05:44:05 【问题描述】:假设我有两张桌子。
FIRST_TAB
ID NAME
===========
1 a
2 b
和
SECOND_TAB
ID NAME
===========
3 c
4 d
有没有办法制作视图/新表,以便我可以进行这样的查询? (我的真实数据有大约 23 个表,没有重复,它们都有相同的列)。
SELECT * FROM NEWVIEW;
ID NAME OPTIONAL
==================
1 a FIRST_TAB
2 b FIRST_TAB
3 c SECOND_TAB
4 d SECOND_TAB
【问题讨论】:
【参考方案1】:用途:
CREATE OR REPLACE VIEW newview AS
SELECT a.id,
a.name,
'FIRST_TAB' AS optional
FROM FIRST_TAB a
UNION ALL
SELECT b.id,
b.name,
'SECOND_TAB' AS optional
FROM FIRST_TAB b
可选列是一个静态字符串,您可以在其中指定您需要的内容,假设没有特殊字符。
UNION ALL
比使用UNION
更快,因为它不会删除重复项。如果您需要删除重复项,只需删除“ALL”关键字(我相信optional
列值将取自最早出现重复项的联合语句)。
参考:
CREATE VIEW【讨论】:
啊,谢谢,我浏览了一下,但不知何故错过了它。通配符在这里可用吗?我有很多专栏。 @Tg:可以,但不建议这样做,因为 UNION 语句需要匹配结果集中每个序数位置的数据类型。 IE:id 是 INT,每个后续 UNION 查询的第一列必须是 INT。如果列顺序每次都发生变化,那你就有麻烦了。以上是关于Postgresql:如何逐行连接表?的主要内容,如果未能解决你的问题,请参考以下文章
如何优化 Postgresql max_connections 和 node-postgres 连接池?
如何将strapi、graphql和postgres连接在一起?
Docker Compose 无法从数据库 (jdbc:postgresql://db:5432/postgres) 为用户“postgres”获取连接:连接尝试失败