为什么postgreSQL中有不同类型的数组?

时间:2015-08-10 10:03:06

标签: sql postgresql

我有这个查询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适用于多种数组?

1 个答案:

答案 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 ...)