我有这个查询select array_agg(id) as idtag FROM POdelivery_a where ....
它在数组中显示id
:{26053,26021,26055}
我稍后会在其他查询中使用它...
这个问题假设我像这样使用它:
select * from a where id in {26053,26021,26055}
它给了我一个错误:
错误:“{”
处或附近的语法错误
它将接受查询:
select * from a where d in (26053,26021,26055)
那么为什么array_agg(id)
会返回一个我无法使用的数组呢?我总是需要做转换......
array_agg(id)
是否有办法将结果作为(26053,26021,26055)
而不是{26053,26021,26055}
返回?
为什么PostgreSQL适用于多种数组?
答案 0 :(得分:1)
PostgreSQL数组和SQL列表(集)存在重叠。这些类型在现代SQL中非常相似,但在典型用法中存在语义差距。数组是一个没有原子值的数组,可以计算和存储。列表(集合)通常是某些子选择的多行结果(也可以存储在现代SQL中)。
示例:
-- the array constructors
SELECT ARRAY[1,2,3]
SELECT array_agg(someval) FROM tab
-- the list constructor
VALUES(1),(2),(3)
SELECT id FROM tab
-- filtering
SELECT * FROM tab WHERE id = ANY(ARRAY[1,2,3])
SELECT * FROM tab WHERE id IN (1,2,3)
SELECT * FROM tab WHERE id = ANY (SELECT array_agg(...))
SELECT * FROM tab WHERE id IN (SELECT idf FROM ...)