我有以下资料:

SELECT *
FROM (
   SELECT '{"people": [{"name": "Bob", "occupation": "janitor"}, {"name": "Susan", "occupation": "CEO"}]}'::jsonb as data
) as b
WHERE data->'people' @> '[{"name":"Bob"}]'::jsonb;

我正在筛选对象{“name”:“Bob”,“ocposition”:“janitor”}
我该如何归还鲍勃的职业(“看门人”)?
SELECT data->'people'->>'occupation'
FROM (
   SELECT '{"people": [{"name": "Bob", "occupation": "janitor"}, {"name": "Susan", "occupation": "CEO"}]}'::jsonb as data
) as b
WHERE data->'people' @> '[{"name":"Bob"}]'::jsonb;

回报
?column?
--------
NULL

寻找:
occupation
----------
janitor

最佳答案

如果您不关心jsonb所在行上的任何其他内容,则可以从jsonb中取出所有元素,然后将它们作为单独的元素进行选择

SELECT data->>'occupation' as occupation
FROM (
  SELECT jsonb_array_elements(
    '{"people":
       [
         {"name": "Bob", "occupation": "janitor"},
         {"name": "Susan", "occupation": "CEO"}
       ]
     }'::jsonb->'people') as data) as b
WHERE data @> '{"name":"Bob"}';

结果
职业
-----------
看门人
(1行)

关于postgresql - 我如何选择“职业”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30696915/

10-12 04:19