我正在寻找表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版本。
答案 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))