MySQL:如何查找字符串列表中的列值

时间:2019-01-24 21:04:02

标签: mysql sql

Mysql:如何查找列表中的列值是否包含许多字符串。 说明:t.name =“测试”

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

我必须用* .t来获取*名称包含前三个示例结果

1 个答案:

答案 0 :(得分:0)

有几种选择:

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

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中,列表表可以模拟with a 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 '%'))