Это немного сложно объяснить. Оператор IN не смотрит на строку CSV в столбце и обрабатывает ее как разделенный запятыми список значений, которые необходимо просмотреть. Если значением столбца являются некоторые данные CSV, то оператор in будет искать эту точную строку, запятые и все остальное в некотором другом списке значений
2 IN (1,2) --true
'2' IN ('1','2') --true
'2' IN ('1,2') --false
'1,2' IN ('1,2') --true
Всегда помните, что ваш SQL скомпилирован как любой другой программа. Данные, которые вы записываете в утверждение, становятся частью программы. Данные в таблице НЕ становятся частью программы. Вот почему вы не можете использовать IN в некоторых разделенных запятыми списках, которые вы найдете в строке таблицы
В нынешнем виде вам придется разделить '2,3' на две строки '2' и '3', или оставьте это как строку и используйте как
SELECT GROUP_CONCAT(A.FIELD2)
FROM A
INNER JOIN B
ON CONCAT(',', B.FIELD2, ',') LIKE CONCAT('%,', A.FIELD1, ',%')
WHERE B.FIELD1=3
Nasty! :)