PostgreSQL多个子查询返回的行用作表达式

时间:2018-07-05 11:03:12

标签: sql postgresql

运行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 :(得分: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;