在MySQL中将JSON数组字段与字符串字段连接

时间:2018-07-10 01:39:08

标签: mysql sql json

我正在寻找表2中的记录,这些记录的ID存在于表1中的nums字段(JSON)的值中。

表1

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

表2

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

我想得到下一个结果。

需要行

id |
---+
1  | 
2  | 

我正在使用5.7 mysql版本。

3 个答案:

答案 0 :(得分:1)

如果我正确理解:

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

您可能需要将第二个参数强制转换为字符串。

答案 1 :(得分:1)

另一种选择是将JSON数组转换为文本,然后使用REGEXP搜索匹配的ID:

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)), '[[:>:]]');

答案 2 :(得分:1)

尝试一下,

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