【问题标题】:MySql query to get child tables as Json columnMySql 查询以获取子表作为 Json 列
【发布时间】:2020-10-18 17:53:45
【问题描述】:

我有 3 个数据库表。

  • 用户
  • 书籍
  • Users_Books

在 Mysql 查询中,我想从用户表中获取所有列 并将 Books 和 Uers_Books 作为 Mysql 查询中的 Json 数据。 所以一列结果会有Json数据。

请查看示例数据和所需结果。

Sample Data
=============
Users
------------------
user_id, user_name
------------------
1, User_A
2, User_B
3, User_C

Books
------------------
book_id, book_name
------------------
1, Book_A
2, Book_B
3, Book_C

Users_Books
-----------------------------------
assigned_date, user_id, book_id
-----------------------------------
01-01-2020, 1, 1
02-01-2020, 1, 2
03-01-2020, 1, 3
04-01-2020, 2, 1
05-01-2020, 3, 1
06-01-2020, 4, 1

Sample Output
==============================
user_id, user_name, json_col
------------------------------
1, User_A, (See Json Output below for this row)
2, User_B
3, User_C

[{
    "assigned_date": "01-01-2020",
    "user_id": "1",
    "book_id": "1",
    "book_detail": {
        "book_id": "1",
        "book_name": "Book_A"
    }
}, {
    "assigned_date": "02-01-2020",
    "user_id": "1",
    "book_id": "2",
    "book_detail": {
        "book_id": "2",
        "book_name": "Book_B"
    }
}, {
    "assigned_date": "03-01-2020",
    "user_id": "1",
    "book_id": "3",
    "book_detail": {
        "book_id": "3",
        "book_name": "Book_C"
    }
}]

我不想使用 GROUP_CONCAT。我只想像此页面上的第一个解决方案一样使用连接。 MySQL One-to-Many to JSON format

【问题讨论】:

    标签: mysql sql json


    【解决方案1】:

    您应该使用JSON_OBJECT()JSON_ARRAYAGG() 的组合。抱歉,如果这不是您想要的。

    SELECT u.user_id, u.user_name,
      JSON_ARRAYAGG(
        JSON_OBJECT(
          'assigned_date', ub.assigned_date,
          'user_id', ub.user_id,
          'book_id', ub.book_id,
          'book_detail', JSON_OBJECT(
            'book_id', b.book_id,
            'book_name', b.book_name
          )
        )
      ) AS json_col
    FROM Users AS u
    JOIN Users_Books AS ub USING (user_id)
    JOIN Books AS b USING (book_id)
    GROUP BY u.user_id
    

    MySQL 5.7.22 及更高版本支持这些 JSON 函数。如果您使用的是旧版本,则必须先升级。

    P.S.:这与您的问题无关,但您应该将日期以 YYYY-MM-DD 格式存储在正确的 DATE 列中,而不是 MM-DD-YYYY 格式的字符串。

    【讨论】:

      猜你喜欢
      • 2018-07-08
      • 2021-04-19
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多