MySQL JSON数组在Where的条件下

时间:2017-05-15 12:29:56

标签: mysql sql json

它正在工作但只返回一个记录。我总共有5个。

Catalog.similar 是json类型字段。我从返回中移除[""]并放入WHERE IN Condition。但我只得到一条记录。

SELECT * FROM similar_codes a WHERE a.id IN (SELECT REPLACE(SUBSTR(c.similar,2,LENGTH(c.similar)-2),'"','') FROM catalog c WHERE c.id=1)

WHERE IN中选择的返回是。

SELECT REPLACE(SUBSTR(c.similar,2,LENGTH(c.similar)-2),'"','') FROM catalog c WHERE c.id=1)

3380, 3382, 1952, 3384, 3383

2 个答案:

答案 0 :(得分:1)

为什么不使用内置函数,而不是尝试开发自己的搜索JSON的方法?或者,如果您使用的是不支持JSON数据的MySQL版本,那么您最好使用链接表。

-- Create main table
CREATE TEMPORARY TABLE test (id INT(11));
INSERT INTO test (id) VALUES (3380), (3382), (1952), (3384), (3383);

-- Create JSON table
CREATE TEMPORARY TABLE test_search (id INT(11), similar JSON);
INSERT INTO test_search (id, similar) VALUES (1, JSON_ARRAY(3380, 3382, 1952, 3384, 3383));

-- Select
SELECT t.id 
FROM (SELECT similar AS ids FROM test_search WHERE id = 1) ts
INNER JOIN test t ON JSON_CONTAINS(ts.ids, CAST(t.id AS json), '$');

答案 1 :(得分:0)

您可以使用GROUP_CONCAT()

SELECT * FROM similar_codes a WHERE a.id IN 
(SELECT GROUP_CONCAT(REPLACE(SUBSTR(c.similar,2,LENGTH(c.similar)-2),'"','')) FROM catalog c WHERE c.id=1)