【发布时间】:2018-08-10 00:51:01
【问题描述】:
所以我有一个包含一些整数数组的表。
CREATE TABLE arrays (
nums int[],
id serial PRIMARY KEY
);
INSERT INTO arrays VALUES
('{1, 5, 72}', 1),
('{3}', 2),
('{32, 6}', 3);
如果我想将这些数组元素分散到单独的行中,我可以使用返回 SETOF INT 的函数来实现,例如 unnest。
SELECT
id,
unnest(nums)
FROM arrays;
-- id unnest
-- 1 1
-- 1 5
-- 1 72
-- 2 3
-- 3 32
-- 3 6
但我一直认为 SELECT 子句中的子查询必须返回单个值!然而unnest 正在返回多个值。 Postgres 只是通过复制每个值的行来处理它。但是如果我尝试另一个返回多个值的子查询,像这样:
SELECT
a.id,
(SELECT a.nums[1] UNION SELECT a.nums[2])
FROM arrays a;
-- ERROR: more than one row returned by a subquery used as an expression
这给出了一个错误。似乎应该以类似于unnest 的方式处理它。 为什么unnest 允许返回多个值但不允许返回这个?
【问题讨论】:
标签: postgresql