代码之家  ›  专栏  ›  技术社区  ›  Alfred Balle

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

  •  0
  • Alfred Balle  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  3
  •   Gordon Linoff    6 年前

    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
  •  1
  •   Yogesh Sharma    6 年前

    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;