Mysql: как найти значение столбца в списке строк - PullRequest
0 голосов
/ 25 января 2019

Mysql: как найти, если значение столбца в списке содержит много строк. Expl: t.name = ‘test’

Select * 
from table t 
where ( t.name Like [‘test tuto1’, ‘test tuto2’, ‘test tuto3’, ‘teeeest’....]

Я должен получить * с t.name содержит результат первых 3 примеров

1 Ответ

0 голосов
/ 25 января 2019

Для этого есть несколько вариантов:

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 '%'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...