【问题标题】:How to convert SQL Query to JSON format如何将 SQL 查询转换为 JSON 格式
【发布时间】:2019-11-19 21:49:21
【问题描述】:

我正在尝试将我的 SQL 结果转换为 JSON 格式,但它显示错误。

SQL 查询:

 SELECT 
    User.name, 
    Course.title, 
    Member.role 
FROM User 
JOIN Member JOIN Course 
    ON User.user_id = Member.user_id 
    AND Member.course_id = Course.course_id 
ORDER BY 
    Course.title, 
    Member.role DESC, 
    User.name;

我也尝试过 FOR JSON PATH 和 FOR JSON AUTO,但出现以下错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“for JSON AUTO”附近使用正确的语法

【问题讨论】:

  • 请向我们展示您期望的结果。
  • 我以为 FOR JSON PATH/AUTO 是 Microsoft sql server,而不是 MySQL?

标签: mysql sql json


【解决方案1】:

您可以使用JSON_OBJECT()在MySQL中生成有效的json。

例如,这将为每一行生成一个 json 对象,在名为 js 的列中包含键 user_namecourse_titlemember_role

SELECT JSON_OBJECT(
    'user_name', User.name, 
    'course_title', Course.title, 
    'member_role', Member.role 
) as js
FROM User 
JOIN Member JOIN Course 
    ON User.user_id = Member.user_id 
    AND Member.course_id = Course.course_id 
ORDER BY 
    Course.title, 
    Member.role DESC, 
    User.name;

如果您想要一个由单行单列组成的结果集,其中所有对象都聚合在一个数组中,您可以在JSON_OBJECT() 之上使用JSON_ARRAYAGG

SELECT JSON_ARRAYAGG(js) js_array
FROM (
    SELECT JSON_OBJECT(
        'user_name', User.name, 
        'course_title', Course.title, 
        'member_role', Member.role 
    ) as js
    FROM User 
    JOIN Member JOIN Course 
        ON User.user_id = Member.user_id 
        AND Member.course_id = Course.course_id 
    ORDER BY 
        Course.title, 
        Member.role DESC, 
        User.name
);

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2020-01-19
    • 2020-05-11
    • 1970-01-01
    相关资源
    最近更新 更多