[英]MySQL JSON array in Where in condition
它正在工作,但仅返回一个Record。 我总共有5个。
Catalog.similar是json类型字段。 我从返回中删除[“”]并将其放在WHERE IN条件中。 但是我只有一张唱片。
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返回。
SELECT REPLACE(SUBSTR(c.similar,2,LENGTH(c.similar)-2),'"','') FROM catalog c WHERE c.id=1)
3380, 3382, 1952, 3384, 3383
与其尝试开发自己的搜索JSON的方法,不为什么不使用内置函数? 另外,如果您使用的MySQL版本不支持JSON数据,则最好使用链接表。
-- 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), '$');
您可以使用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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.