Для этого есть несколько вариантов:
1) создать серию OR
выражений, таких как:
SELECT t.* from mytable t WHERE t.name LIKE '%val1%' or t.name LIKE '%val2%'...
2) Использовать find_in_set
: возможно, более эффективно, чем комбинированноеLIKE
s
SELECT t.* from mytable t WHERE find_in_set(t.name, 'val1,val2,...')
3) Используйте регулярное выражение: тот же порядок скорости, что и find_in_set
SELECT t.* from mytable t WHERE t.name REGEXP 'val1|val2|...';
4) Если у вас очень большой список значений, ваш запросзамедлится, и вы в конечном итоге достигнете максимального размера varchar в выражении, представляющем список.Я бы рекомендовал поместить их в таблицу базы данных и использовать условие WHERE EXIST
с коррелированным подзапросом:
SELECT t.*
FROM mytable t
WHERE EXISTS (SELECT 1 from mylist where t.name like CONCAT('%', l.val '%'))
5) с MySQL 8.0; таблицу списка можно эмулировать с помощью CTE :
WITH mylist AS (
SELECT '%val1%' UNION SELECT '%val2%' UNION ...)
)
SELECT t.*
FROM mytable t
WHERE EXISTS (SELECT 1 from mylist where t.name like CONCAT('%', l.val '%'))