它正在工作但只返回一个记录。我总共有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
答案 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)