【问题标题】:SQL query for below statement以下语句的 SQL 查询
【发布时间】:2022-01-30 06:28:38
【问题描述】:

输入 ID 和 Name 列值都是数组类型。

 id name
 [1,2,3,4,5] [a,b,c,d]

输出

Id Name
1 a
2 b
3 c
4 d
5 null

【问题讨论】:

标签: mysql json


【解决方案1】:

您可以使用JSON_TABLE 展开它们。

SELECT ids.Id, names.Name
FROM test t
CROSS JOIN JSON_TABLE(t.id,   '$[*]' COLUMNS(ordinal FOR ORDINALITY, Id INT PATH '$')) AS ids
LEFT JOIN  JSON_TABLE(t.name, '$[*]' COLUMNS(ordinal FOR ORDINALITY, Name TEXT PATH '$')) AS names
  ON names.ordinal = ids.ordinal;
身份证 |姓名 -: | :--- 1 |一个 2 | b 3 | C 4 | d 5 |

db小提琴here

【讨论】:

    【解决方案2】:

    你不能直接从数组中做这样的事情。您必须像第二张图中显示的那样将它们分成平行的部分。然后逐行插入数据。

    【讨论】:

      【解决方案3】:

      PostgreSQL

      数组数据类型

      postgres=# create table arr(id int[],"name" char[]);
      CREATE TABLE
      postgres=# insert into arr values(array[1,2,3,4,5],array['a','b','c','d']);
      INSERT 0 1
      postgres=# select * from arr;
           id      |   name
      -------------+-----------
       {1,2,3,4,5} | {a,b,c,d}
      (1 row)
      
      postgres=# select unnest(id) id ,unnest("name") "name"  from arr;
       id | name
      ----+------
        1 | a
        2 | b
        3 | c
        4 | d
        5 |
      (5 rows)
      

      JSON 数据类型

      postgres=# create table arrj(id json, "name" json);
      CREATE TABLE
      postgres=# insert into arrj values(array_to_json('{1,2,3,4,5}'::int[]),array_to_json('{"a","b","c","d"}'::char[]));
      INSERT 0 1
      postgres=# select * from arrj;
           id      |       name
      -------------+-------------------
       [1,2,3,4,5] | ["a","b","c","d"]
      (1 row)
      
      postgres=# select json_array_elements_text(id) id ,json_array_elements_text(name) "name" from arrj;
       id | name
      ----+------
       1  | a
       2  | b
       3  | c
       4  | d
       5  |
      (5 rows)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 1970-01-01
        • 2017-04-21
        相关资源
        最近更新 更多