![](/img/trans.png)
[英]Find object having the highest value in JSONB array of objects in Postgresql
[英]Find value in array (Postgresql)
以下命令返回“ {3130,3135,2179,3186} ”,鍵入“ INTEGER [] ”:
SELECT
array_agg(c) AS c
FROM
(
SELECT 3130::INTEGER AS c
UNION
SELECT 3135::INTEGER AS c
UNION
SELECT 2179::INTEGER AS c
UNION
SELECT 3186::INTEGER AS c
) AS v
如果我試圖通過直接將文本轉換為整數數組來找到數字“3186”,它可以正常工作:
SELECT 3186::INTEGER = ANY
(
'{3130,3135,2179,3186}'::INTEGER[]
)
但是如果我嘗試對第一個查詢的結果做同樣的操作,我得到一個“ 運算符不存在:integer = integer [] ”錯誤消息:
SELECT 3186::INTEGER = ANY
(
SELECT
array_agg(c) AS c
FROM
(
SELECT 3130::INTEGER AS c
UNION
SELECT 3135::INTEGER AS c
UNION
SELECT 2179::INTEGER AS c
UNION
SELECT 3186::INTEGER AS c
) AS v
)
我究竟做錯了什么?
我正在使用PostgreSQL 9.5.3,PgAdmin 1.22.1
有兩種形式的ANY()
。 在您的查詢中,它們是混合的。
SELECT 3130 = ANY(
ARRAY(
SELECT 3130::INTEGER AS c
UNION
SELECT 3135::INTEGER AS c
UNION
SELECT 2179::INTEGER AS c
UNION
SELECT 3186::INTEGER AS c
)
)
要么
SELECT 3130 = ANY(array_agg(c))
FROM (
SELECT 3130::INTEGER AS c
UNION
SELECT 3135::INTEGER AS c
UNION
SELECT 2179::INTEGER AS c
UNION
SELECT 3186::INTEGER AS c
) alias
如果要使用ANY (subquery):
SELECT 3130 = ANY(
SELECT 3130::INTEGER AS c
UNION
SELECT 3135::INTEGER AS c
UNION
SELECT 2179::INTEGER AS c
UNION
SELECT 3186::INTEGER AS c
)
您可以顯式轉換為INTEGER[]
:
SELECT 3186::INTEGER = ANY(
(
SELECT array_agg(c) AS c
FROM (
SELECT 3130::INTEGER AS c
UNION
SELECT 3135::INTEGER AS c
UNION
SELECT 2179::INTEGER AS c
UNION
SELECT 3186::INTEGER AS c
) AS v
)::INTEGER[]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.