有几种选择:
1)建立一系列
OR
ED表达式如下:
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)使用regexp:与
芬德尼集
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,可以模拟列表表
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 '%'))