我(仍然)是 postgresql 和 jsonb 的新手。我正在尝试从子查询中选择一些记录并被卡住。我的数据列如下所示(jsonb):
{"people": [{"age": "50", "name": "Bob"}], "another_key": "no"}
{"people": [{"age": "73", "name": "Bob"}], "another_key": "yes"}
这是我的查询。我想选择年龄大于 30 岁的“Bob”的所有名字:
SELECT * FROM mytable
WHERE (SELECT (a->>'age')::float
FROM (SELECT jsonb_array_elements(data->'people') as a
FROM mytable) as b
WHERE a @> json_object(ARRAY['name', 'Bob'])::jsonb
) > 30;
我得到错误:
more than one row returned by a subquery used as an expression
我不太明白。如果我做一些简单的替换(仅用于测试),我可以这样做:
SELECT * FROM mytable
WHERE (50) > 30 -- 50 is the age of the youngest Bob
并返回两行。