首页 > 解决方案 > 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,但也失败了。

标签: sqlpostgresql

解决方案


使用聚合函数,例如string_agg()or json_agg()

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

推荐阅读