目前,我的数据库(mariaDB)中有一个名为 data 的列,其中包含一个 json 列表:
ID | data
1 | '["section1","section2","section3"]'
2 | '["section2","section4"]'
我想把它变成这样:
id | section1 | section2 | section3 | section4
1 | 1 | 1 | 1 | 0
2 | 0 | 1 | 0 | 1
这意味着所有字段中的所有可能值都会成为列,如果该行相应的列表项存在,则获取值 1
;如果不存在,则获取值 0
。
有什么方法可以通过查询来转换它吗?
最佳答案
SELECT
id,
JSON_LENGTH(JSON_SEARCH(data, 'all', 'section1')) section1,
JSON_LENGTH(JSON_SEARCH(data, 'all', 'section2')) section2,
JSON_LENGTH(JSON_SEARCH(data, 'all', 'section3')) section3,
JSON_LENGTH(JSON_SEARCH(data, 'all', 'section4')) section4
from test;
如果您需要零而不是 NULL,请使用 COALESCE() 包装表达式。
如果单独的data
值不能包含重复的值(这是由根据约束提供的),或者如果您不需要值数量,但只有它们存在,您可以使用
select
id,
JSON_CONTAINS(data, '"section1"') section1,
JSON_CONTAINS(data, '"section2"') section2,
JSON_CONTAINS(data, '"section3"') section3,
JSON_CONTAINS(data, '"section4"') section4
from test;
PS。如果可能的 sectionX
值列表是不确定的或动态的,那么您必须使用带有动态 SQL 的存储过程。
关于mysql - 使用 SQL 将 json 数据列表字段转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63897414/