Я (еще) новый для postgresql и jsonb. Я пытаюсь выбрать некоторые записи из подзапроса и застрять. Мой столбец данных выглядит следующим образом (jsonb):JSONB: более одной строки, возвращаемой подзапросом, используемым как выражение
{"people": [{"age": "50", "name": "Bob"}], "another_key": "no"}
{"people": [{"age": "73", "name": "Bob"}], "another_key": "yes"}
И вот мой запрос. Я хочу, чтобы выбрать все имена, которые являются «Боб», возраст которых превышает 30:
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
и это возвращает обе строки.
вопросом, как это должно обеспечить точное определение таблицы, показывающее все соответствующие столбцы, типы данных и ограничения - то, что вы получаете с '\ d mytable' в psql или допустимым скриптом CREATE TABLE. –