sql - 子查询中的多个 json_object_agg 函数返回语法错误

标签 sql database postgresql

我有两张 table

CREATE TABLE service (
    id SERIAL PRIMARY KEY,
    image VARCHAR
);

CREATE TABLE service_description (
    id SERIAL PRIMARY KEY,
    service_id INTEGER,
    language_id INTEGER,
    title VARCHAR,
    subtitle VARCHAR,
    col_left TEXT,
    col_right TEXT
);

我正在尝试将第二个表中的最后 4 列检索为以 language_id 作为键的对象。

以下查询有效(省略 col_left/right 以节省空间)

SELECT
 s.*,
 (
   SELECT
     json_object_agg(language_id, title) AS title
   FROM
     service_description sd
 ),
 (
   SELECT
     json_object_agg(language_id, subtitle) AS subtitle
   FROM
     service_description sd
 )

FROM
    service s

虽然我这样做了

SELECT
 s.*,
 (
   SELECT
     json_object_agg(language_id, title) AS title,
     json_object_agg(language_id, subtitle) AS subtitle
   FROM
     service_description sd
 )

FROM
    service s

我收到错误代码 42601 - 语法错误。怎么了?

最佳答案

查询中的问题是您在子查询 中选择了不止一列。尝试这样的事情

SELECT * 
FROM   service s 
       CROSS JOIN (SELECT Json_object_agg(language_id, title)    AS title, 
                          Json_object_agg(language_id, subtitle) AS subtitle 
                   FROM   service_description sd) B 

关于sql - 子查询中的多个 json_object_agg 函数返回语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39181826/

相关文章:

sql - ORDER BY 有/没有 ROW_NUMBER() 的差异

sql - 选择不同的行并显示每个值的计数

sql - 优化 postgis 索引查询。注意 : gserialized_gist_joinsel: jointype 1 not supported

mysql - SQL 按 ASC 查询订单日期,但过去的条目结束了吗?

java - Java获取MYSQL数据库大小

python - PostgreSQL 数据库可以拥有的表的数量是否有限制?

c# - C#中处理数据库相关类时 `using`语句的用法最佳实践?

mysql - 如何将每天的 unix 时间分组?

postgresql - where 子句中的 lower() 与模式不匹配

sql - 检查 Postgresql 中条件的约束