вам нужно использовать FIND_IN_SET()
SELECT column1 FROM table WHERE FIND_IN_SET('3', column2);
Вы никогда не должны хранить данные внутри таблицы в виде списка, разделенного запятыми. .. так что если бы я был вами, я бы подумал о том, чтобы разделить его на строки
, чтобы нормализовать вашу базу данных, вы можете сделать такой запрос ... ПРИМЕЧАНИЕ. Вам нужно знать количество штук, которые у вас есть в столбце2.
CREATE TEMPORARY TABLE IF NOT EXISTS normalized_table AS
( SELECT
column1,
SUBSTRING_INDEX(SUBSTRING_INDEX(column2, ',', n.digit+1), ',', -1) column2
FROM test
JOIN(SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) n
ON LENGTH(REPLACE(column2, ',' , '')) <= LENGTH(column2)-n.digit
ORDER BY column1, n.digit
);
DROP table test;
CREATE table test (column1 varchar(2), column2 varchar(2));
INSERT INTO test (column1, column2)
SELECT column1, column2 FROM normalized_table;
JOIN с каждой цифрой - это ваш ключ ... если у вас есть 6 элементов, разделенных запятой, то объединение 0-5 цифр чтобы присоединиться.
, если вы не знаете, сколько есть, тогда просто запустите это, чтобы узнать, сколько чисел для объединения
SELECT MAX(LENGTH(REPLACE(column2, ',', ''))) FROM test;