【问题标题】:MySQL, put second table into another tableMySQL,将第二个表放入另一个表
【发布时间】:2020-12-23 08:50:34
【问题描述】:

我是 mysql 新手。我有两张桌子(tableA,tableB)。我想构造一个查询来检索数据,其中检索到的数据将表 B 作为表 A 中的一个字段,如下所示:

{
    tableA_key1: tableA_value1,
    tableA_key2: tableA_value2,
    tableA_key3: tableA_value3, // ...all key-value pairs from table A
    additional_data: {
        tableB_key1: tableB_value1,
        tableB_key2: tableB_value2,
        tableB_key3: tableB_value3, // ...all key-value pairs from table B
    }
}

换句话说,将第二个表作为附加对象嵌套在第一个表中。我尝试过 JOIN 运算符,但这会使结构变平? 我怎样才能像上面的架构那样嵌套表?

【问题讨论】:

  • 考虑处理应用代码中数据显示的问题
  • 是的,但是我需要运行两个单独的查询?
  • 没有。您只需解析从单个简单查询返回的数组
  • 你能写一个这种查询的例子吗?提前谢谢你
  • 如需进一步帮助,请参阅meta.stackoverflow.com/questions/333952/…

标签: mysql sql json


【解决方案1】:

在 MySQL 5.7 或更高版本中,您可以像这样使用 JSON:

select a.*,
    json_object(
        'tableB_key1', b.tableB_key1,
        'tableB_key2', b.tableB_key2
    ) as additional_data
from tablea a
inner join tableb b on ....

这会将表示匹配记录的 JSON 对象放入一个名为 additional_data 的新列中。您需要枚举需要进入该对象的所有键/值对。

如果可能有多个匹配项,您可能需要考虑使用数组来代替:

select a.*,
    json_arrayagg(json_object(
        'tableB_key1', b.tableB_key1,
        'tableB_key2', b.tableB_key2
    )) as additional_data
from tablea a
inner join tableb b on ....
group by a.id

【讨论】:

  • 先生,我们从哪些网站了解到这些东西。
  • @KUMAR:MySQL JSON documentation 是一个很好的起点……
  • 唯一奇怪的是mysql返回的是字符串而不是真实的对象
猜你喜欢
  • 1970-01-01
  • 2014-11-26
  • 2013-05-31
  • 1970-01-01
  • 2015-01-15
  • 2013-04-25
  • 2016-02-05
  • 2010-11-24
  • 1970-01-01
相关资源
最近更新 更多