首页 > 解决方案 > Mysql:如何在字符串列表中查找列值

问题描述

Mysql:如何查找列表中的列值是否包含许多字符串。解释:t.name='test'</p>

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

我必须得到 * 与 t.name 包含前 3 个示例结果

标签: mysqlsqlcsvsubquerysql-like

解决方案


有几种选择:

1) 构建一系列ORed 表达式,例如:

SELECT t.* from mytable t WHERE t.name LIKE '%val1%' or t.name LIKE '%val2%'...

2)使用find_in_set:可能比组合更LIKE有效

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 '%'))

推荐阅读