首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于多值问题的JSON_EXTRACT (使用MYSQL将整数数组中的字符串与整数匹配)

用于多值问题的JSON_EXTRACT (使用MYSQL将整数数组中的字符串与整数匹配)
EN

Stack Overflow用户
提问于 2022-08-08 21:54:25
回答 1查看 69关注 0票数 -1

table1:

代码语言:javascript
复制
id  languages
2   ["2"]   
3   ["1"]   
9   ["1","2"]

“语言”字段是varchar(255)。

Table2:

代码语言:javascript
复制
language_id name
1           English
2           Japanese

"language_id“是int(11)。

我希望输出类似于以下内容之一:

预期产出1:

代码语言:javascript
复制
id  languages  name
2   ["2"]      ["Japanese"]
3   ["1"]      ["English"]
9   ["1","2"]  ["English", "Japanese"]

预期产出2:

代码语言:javascript
复制
id  languages  name
2   ["2"]      Japanese
3   ["1"]      English
9   ["1","2"]  English, Japanese

我尝试了以下查询,该查询只会关闭:

代码语言:javascript
复制
SELECT t2.name, r.*
FROM table2 t2
LEFT JOIN table1 t1
ON t2.language_id=CAST(json_extract(t1.languages, '$[0]') AS UNSIGNED);

上述查询的输出:

代码语言:javascript
复制
id  languages  name
2   ["2"]      Japanese
3   ["1"]      English
9   ["1","2"]  English

在"name“字段中省略了语言数组的第二部分。

我怎样才能像预期的输出1或2一样输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-08 22:23:21

使用JSON_TABLE()将数组拆分为行。然后,您可以使用它来获取所有的名称,并使用GROUP_CONCAT()将它们组合成一个以逗号分隔的字符串。

代码语言:javascript
复制
SELECT t1.id, t1.languages, GROUP_CONCAT(t2.name) AS names
FROM table1 AS t1
JOIN JSON_TABLE(languages, 
                "$[*]" columns (language VARCHAR(9) PATH "$")) AS t1_json
JOIN table2 AS t2 ON t2.language_id = t1_json.language
GROUP BY t1.id

演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73284414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档