sql - 在postgres中展平嵌套记录

标签 sql postgresql

如何展平外部选择中的 foo 列(在 PostgreSQL 中)?

WITH RECURSIVE t AS (
    SELECT row(d.*) as foo FROM some_multicolumn_table as d
UNION ALL
    SELECT foo FROM t WHERE random() < .5
)
SELECT foo FROM t

我想要的是在外部选择中输出 some_multicolumn_table 的所有列(水平地,即作为多列的一行),而不仅仅是单个“记录”列。

怎么做?

最佳答案

那里不需要 ROW 构造函数,因此您可以使用 (foo).* 扩展记录:

WITH RECURSIVE t AS (
    SELECT d as foo FROM some_multicolumn_table as d
UNION ALL
    SELECT foo FROM t WHERE random() < .5
)
SELECT (foo).* FROM t;

虽然这个查询可以简单地写成:

WITH RECURSIVE t AS (
    SELECT d.* FROM some_multicolumn_table as d
UNION ALL
    SELECT t.* FROM t WHERE random() < .5
)
SELECT * FROM t;

我建议尽量保持简单。但我假设这只是一个例子。

关于sql - 在postgres中展平嵌套记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22040663/

相关文章:

sql - 一条记录出现的次数 : SQL Server

mysql - SQL 计数给出 1 1 而不是 2

c# - 有效去除用户评论中的恶语

postgresql - ST_DWithin 不使用带有非文字参数的索引

sql - hive 查询 : Ambiguous column reference acct_nbr in stage

c# - 使用 Fluent API 添加唯一标识符

postgresql - 即使启用了 pgcrypto 扩展,AWS RDS Postgres 加密函数也不起作用

postgresql - 使用 plpgsql 的 FOR LOOP 控件中的 SELECT 子句

Asp.NET Core 后台服务应用

sql - 从数据库表中不存在的数据向查询添加新行