【问题标题】:Getting MySQL JSON Array field to join on a table获取 MySQL JSON 数组字段以加入表
【发布时间】:2021-10-05 08:08:51
【问题描述】:

我在表 A 上有一个 JSON 数组字段,我想从另一个表 B 中读取相关描述。 例子: 表A,

id types
1 [C,B,T]

表 B,

type description
C Car
B Bus
T Train

从表 A 读取数据时,我希望结果应该是,

id types
1 [Car, Bus, Train]

谁能帮助我使用 MySQL 查询来实现这一点?

【问题讨论】:

  • 最终输出会在网页/应用页面上吗?什么 MySQL 版本?
  • @FaNo_FN 查询输出应该和我上面提到的一样。 MySQL 版本:8.0.23。
  • 您的意思是types 输出将保留它的JSON 数组格式,对吧?我很好奇的是最终输出以及如何使用它。我的意思是,它最终会出现在报告中吗?
  • @FaNo_FN 抱歉,我无法理解您的问题。目的是在 UI 上显示类型的实际描述。为此,如果我编写像“SELECT * FROM A”这样的查询,我将得到 [C, B, T]。这在 UI 中是无法理解的。所以我想将 [C, B, T] 映射到表 B 并阅读描述并返回它。
  • @Venk 能否请您创建一个类似db-fiddle.com 的 dbfiddle 并将其添加到您的问题中?

标签: mysql


【解决方案1】:

试试这个:

    CREATE TABLE `a` (
      `id` int DEFAULT NULL,
      `type` json DEFAULT NULL
    ) ENGINE=InnoDB;

    INSERT INTO `a` VALUES (
      1, '["C", "B", "T"]'
    );

    CREATE TABLE `b` (
      `type` varchar(8) DEFAULT NULL,
      `description` varchar(16) DEFAULT NULL
    ) ENGINE=InnoDB;

    INSERT INTO b VALUES 
      ("C", "Car"),
      ("B", "Bus"),
      ("T", "Train")  ;



    SELECT d.id, CONCAT('[', GROUP_CONCAT(b.description), ']') AS result FROM (
    SELECT id, `c`.`type`
    FROM a,
    JSON_TABLE(`type`, '$[*]'
    COLUMNS(
       `type` VARCHAR(32) PATH '$'))
    AS c) AS d INNER JOIN b ON (`d`.`type` = `b`.`type`);

结果:

    |  id  |   result |
    -------| ----------
    
    '1', '[Car,Bus,Train]'
    

【讨论】:

    【解决方案2】:

    此查询将返回您的输出。

    SELECT tb.id, concat('[', group_concat(tb.description), ']') FROM table_b tb
    WHERE tb.type in (SELECT data_set.types FROM (select SUBSTRING(types, 1, 11) AS TYPES from table_a) AS data_set)
    

    【讨论】:

      猜你喜欢
      • 2017-02-10
      • 2021-03-05
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      相关资源
      最近更新 更多