PostgreSQL более одной строки, возвращенной подзапросом, используемым в качестве выражения - PullRequest
0 голосов
/ 05 июля 2018

Бег PostgreSQL 9.6. Я пытаюсь вывести строки, состоящие из значения и списка имен. Это мой запрос:

SELECT name, (SELECT car_name FROM cars WHERE user = id)
FROM users WHERE user_id = 1 ORDER BY name;

Но это не с:

ERROR:  more than one row returned by a subquery used as an expression

Это, конечно, имеет смысл, но я бы хотел, чтобы вложенный запрос выводился в виде списка или json. Я пробовал с row_to_json, но это тоже не получается.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вместо этого вы можете сделать JOIN:

SELECT u.name, string_agg(c.car_name)
FROM users u LEFT OUTER JOIN
     cars c
     ON c.id = u.user
WHERE u.user_id = 1
GROUP BY u.name
ORDER BY u.name;
0 голосов
/ 05 июля 2018

Используйте функцию агрегирования, например string_agg() или json_agg():

SELECT name,
       (SELECT string_agg(car_name) FROM cars WHERE user = id)
FROM users
WHERE user_id = 1
ORDER BY name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...