运行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
,但这也失败了。
答案 0 :(得分:3)
使用聚合函数,例如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;
答案 1 :(得分:1)
您可以改为使用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;