您的 IN() 查询可能无法正常工作,因为 mysql 返回'1,2' for id 1,并且您需要类似1,2的内容,请查看以下示例
select
replace(replace(t1.ids,'[',''),']','') as id
from table11 t1 where t1.id=1;
上面的查询返回结果为字符串,解释为 '1,2' 而不是 1,2
因此,您的查询可能不会返回您的预期输出。
您可以尝试其他方法,如下所示
解决方案
创建 1 个函数,它将您的 json 字符串转换为另一个表,然后您可以将该表用于您的 in() 查询
尝试以下功能(参考)
DROP FUNCTION IF EXISTS hello;
DELIMITER //
CREATE FUNCTION hello (_list CHAR(20))
RETURNS INT
BEGIN
DECLARE _next TEXT DEFAULT NULL;
DECLARE _nextlen INT DEFAULT NULL;
DECLARE _value TEXT DEFAULT NULL;
iterator:
LOOP
IF LENGTH(TRIM(_list)) = 0 OR _list IS NULL THEN
LEAVE iterator;
END IF;
SET _next = SUBSTRING_INDEX(_list,',',1);
SET _nextlen = LENGTH(_next);
SET _value = TRIM(_next);
INSERT INTO t11 (id) VALUES (_next);
SET _list = INSERT(_list,1,_nextlen + 1,'');
END LOOP;
RETURN 1;
END //
DELIMITER ;
创建一张表
CREATE TABLE t11(id CHAR(1));
然后执行以下查询。
DELETE FROM t11;
SELECT hello(REPLACE(REPLACE(t1.ids,'[',''),']','')) FROM table11 t1;
SELECT t2.* FROM table22 t2 WHERE t2.id IN(SELECT id FROM t11);
我希望这能解决你的问题