【问题标题】:PostgreSQL more than one row returned by a subquery used as an expressionPostgreSQL 多于一行由用作表达式的子查询返回
【发布时间】:2018-07-05 11:03:11
【问题描述】:

正在运行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,但也失败了。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    使用聚合函数,例如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;
    

    【讨论】:

      【解决方案2】:

      您可以改用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;
      

      【讨论】:

      • 似乎有效,但返回 ex。 ["car_nameX", "car_nameY"]. Can it return [{ "car_name": "car_nameX"}, {...}]
      猜你喜欢
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      相关资源
      最近更新 更多