MySQL 5.7
我有一个表mission_sets
,其中有一个字段missions
。
mission_sets
。missions
是一个 JSON 数组。
这是一个示例值
[1, 3, 5, 6, 8]
还有另一个表 missions
,其 id
与 mission_set
中的数组匹配。missions
我想根据 mission_sets
的值从 missions
中获取任务。missions
。
我已经创建了这个 MySQL 查询
SELECT SUBSTRING(missions,2,CHAR_LENGTH(missions)-2) FROM mission_sets WHERE `id`=7
返回
1, 3, 5, 6, 8
因此,我尝试使用此 MySQL 查询获取所有任务详细信息
SELECT * FROM missions
WHERE `id` IN(SELECT SUBSTRING(missions,2,CHAR_LENGTH(missions)-2) FROM mission_sets WHERE `id`=7)
问题是当我运行查询时,我只得到第一行 1
,而不是所有 5 行。
更新: 我也试过这个解决方案,但我仍然只得到一行
SELECT * FROM missions
WHERE FIND_IN_SET(`id`,(SELECT SUBSTRING(missions,2,CHAR_LENGTH(missions)-2) FROM mission_sets WHERE `id`=7))>0
当我用实际值替换嵌入式 SELECT 查询时,我得到了所有行。
最佳答案
我们可以在这里尝试使用 MySQL JSON 函数。使用 JSON_SEARCH
将您的 ID 表加入 JSON 数组表:
SELECT m.*
FROM missions m
INNER JOIN mission_sets ms
ON JSON_SEARCH(ms.missions, 'all', m.id) IS NOT NULL;
Demo
关于mysql - 仅在使用 WHERE...IN 和嵌入式 SELECT 时获取第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53654515/