首页 > 解决方案 > PostgreSQL 子查询数组返回整行而不是单列

问题描述

我有一个看起来像这样的查询:

SELECT
    s.*,
    array(
        SELECT m.id
        FROM swarm_machine sm
        JOIN machine m
        ON sm.machine_id = m.id
        WHERE swarm_id = s.id
    ) as machines
FROM swarm s
WHERE group_id = 48

而不是只返回机器 ID SELECT m.id,我想返回行中的所有列SELECT m.*。PostgreSQL 似乎不允许这样做,但我希望社区可以帮助解决这个问题。

我总是可以用 2 个查询来做到这一点,但如果 PostgreSQL 能为我做到这一点,我宁愿避免往返。

SQL 小提琴:http ://sqlfiddle.com/#!17/d7481/1

标签: sqlpostgresql

解决方案


Postgres 允许它。只需参考记录:

SELECT s.*,
       ARRAY(SELECT m
             FROM swarm_machine sm JOIN
                  machine m
                 ON sm.machine_id = m.id
             WHERE swarm_id = s.id
            ) as machines
FROM swarm s;

是一个 SQL 小提琴。


推荐阅读