Название таблицы: студент:
id name topics
--- ---- --------
1 Test1 1,2,10,15,25
2 Test2 5,21,11,18,13
3 Test3 2,1,16,25,10
4 Test4 2
Мой запрос:
select * from student where topics like '%2%'
вывод: все 4 записи. Ожидается: но мне нужно получить только 3 записи, так как столбец тем с идентификатором 1,3,4 содержит 2. 2-я запись не содержит 2.
2 из 25 и 21 - это как% 2%. Вы никогда не должны хранить значения с разделителями в столбце, вы должны использовать промежуточную таблицу «один ко многим» с несколькими строками studentId -> topic.






Вторая запись ДЕЙСТВИТЕЛЬНО содержит 2. Вам нужно использовать что-то вроде этого.
WHere topics=2 or topics like '2,%'or topics like '%,2' or topics like '%,2,%'
Первый проверяет, является ли количество тем 2. Второй, если первым является 2, но есть и другие. Третий проверяет, является ли 2 последним, но есть некоторые числа перед, а четвертый проверяет, находится ли 2 где-то посередине.
Вы можете использовать функцию FIND_IN_SET:
select * from student where FIND_IN_SET ('2', topics)
Что-нибудь в этом роде может помочь?
SELECT * FROM student WHERE topics LIKE '2,%' OR topics LIKE '%,2,%' OR topics LIKE '%,2' OR topics= '2';
печально, что можно использовать IN с LIKE.
Технически он содержит 2, из которых 21 имеет 2. Ваша подстановочная карта ищет только 2.