mysql - 仅在使用 WHERE...IN 和嵌入式 SELECT 时获取第一行

标签 mysql

MySQL 5.7

我有一个表mission_sets,其中有一个字段missions

mission_setsmissions 是一个 JSON 数组。

这是一个示例值 [1, 3, 5, 6, 8]

还有另一个表 missions,其 idmission_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 查询时,我得到了所有行。

mission set table

mission table

Example Mission Set Table

Example Missions table

最佳答案

我们可以在这里尝试使用 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/

相关文章:

带有 DATEDIFF 的 MySQL 查询

php - 在数据库中保存多个值,在 PHP 中使用行

mysql - fatal error : Could not load sails

php - 将站点连接到 phpMyAdmin 数据库

php - 我可以将 PHP MySQL 资源变量分配/复制到其他吗?

php - 提交登录表单后,URL 保留在操作 php 上

MySQL Select 查询 5.0 和 5.5 之间的差异

php - Laravel 更新并选择

MySQL - 如何存储执行结果

c# - 如何将 Android 应用程序连接到 Xamarin 中的远程数据库服务器?