Py学习  »  DATABASE

mysql:如何在字符串列表中查找if列值

Lotfi • 5 年前 • 1274 次点击  

mysql:如何查找列表中的列值是否包含多个字符串。 expl:t.name=测试

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

我必须用t得到*的结果。name包含前3个示例结果

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43825
 
1274 次点击  
文章 [ 1 ]  |  最新文章 5 年前
GMB
Reply   •   1 楼
GMB    6 年前

有几种选择:

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