【问题标题】:Selecting from array of composite types in Postgres从 Postgres 中的复合类型数组中选择
【发布时间】:2020-08-06 09:34:28
【问题描述】:

我有一个复合类型pin

CREATE TYPE public.pin AS
(
    id uuid,
    name text,
);

还有一个表设备

CREATE TABLE public.devices
(
    name text COLLATE pg_catalog."default" NOT NULL,
    pins pin[] NOT NULL
)

如何编写查询以从 devices 表中选择 pin.name,其中 pin.id 等于已知 id?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您可以为此使用横向连接:

    SELECT pin.name
    FROM devices, unnest(pins) AS pin -- implicit lateral join
    WHERE pin.id = '77068690-787c-431d-9a6f-bd2a069fa5a4' -- random uuid
    

    【讨论】:

      【解决方案2】:

      我设法解决了这个查询的问题:

      SELECT name FROM (SELECT (UNNEST(pins)::pin).id, (UNNEST(pins)::pin).name FROM public.devices) AS _pins WHERE _pins.id = 'uuid'
      

      【讨论】:

      • 我建议在FROM 子句中移动UNNEST(pins)(使用JOIN LATERAL),在SELECT 子句中使用集合返回函数的afaik 定义不明确(请参阅@987654321 @)。
      猜你喜欢
      • 2016-04-21
      • 2011-05-16
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      相关资源
      最近更新 更多