PostgreSQL - 获取对象内部的 JSONB key/value 对和 return 它

PostgreSQL - Get JSONB key/value pair inside object and return it

这个运算符 ?| return 是一个布尔值。它只是检查字符串是否包含在字符串中。

SELECT ids ?| '{100085,100087,100090,100091,100093,100095,100113,
100121,100126,100211,100213,100223,100324,100326}' 
FROM tableA

|ids|
{'100090':'123456789','100096':'987654321'}

这将 return 为真,因为 id 100090 在 ids jsonb 列中。

问题是,有没有办法 return 它找到的不仅仅是一个布尔值。 return 它找到的匹配项的值,而不是 true,例如return'123456789'

一种可能性,有点复杂,但至少函数和 returns 使用这些键找到的所有值。如果你只想要一个那么需要一个限制:

SELECT * FROM 
  (SELECT '{"100090":"123456789","100096":"987654321"}'::jsonb ->>
    unnest('{100085,100087,100090,100091,100093,100095,100113,100121,100126,100211,100213,100223,100324,100326}'::int[])::text AS result) AS x
  WHERE result IS NOT NULL;

结果:

  result
-----------
 123456789
(1 row)

需要子选择,因为出于某种原因试图将 IS NOT NULL 添加到查询中,否则只会声明该列不存在。