Join JSON array field with string field in mysql

北慕城南 提交于 2021-02-09 09:20:23

问题


I am looking for records in table 2 whose id exist in the values of nums field (JSON) in table 1.

table1

id | nums (JSON)
---+-------------------
1  | ["1","2","3","4"]
2  | ["7","8","5","6"]
3  | ["9","10","3","4"]

table2

id |
---+
1  | 
2  | 
53 | 
63 | 

I would like to get the next result.

rows desired

id |
---+
1  | 
2  | 

I am using 5.7 mysql version.


回答1:


If I understand correctly:

select t2.id
from table2 t2
where exists (select 1
              from table1
              where json_contains(nums, t2.id)
             );

You may need to cast the second argument to a string.




回答2:


Another option would be to just cast your JSON arrays to text, and then use REGEXP to search for matching ids:

SELECT *
FROM table2 t2
WHERE EXISTS (SELECT 1 FROM table1 t1
              WHERE CAST(t1.nums AS CHAR(50))
              REGEXP CONCAT('[[:<:]]', CAST(t2.id AS CHAR(50)), '[[:>:]]');



回答3:


Try this,

SELECT * FROM table1 as t1
    LEFT JOIN table 2 as t2 on JSON_CONTAINS(t1.id->'$[*]', CAST(t2.id as JSON))


来源:https://stackoverflow.com/questions/51256141/join-json-array-field-with-string-field-in-mysql

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!