mysql - Mysql:如何在字符串列表中查找列值
问题描述
Mysql:如何查找列表中的列值是否包含许多字符串。解释:t.name='test'</p>
Select *
from table t
where ( t.name Like [‘test tuto1’, ‘test tuto2’, ‘test tuto3’, ‘teeeest’....]
我必须得到 * 与 t.name 包含前 3 个示例结果
解决方案
有几种选择:
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,可以使用 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 '%'))
推荐阅读
- javascript - 创建具有没有值的属性的 Angular 组件
- c - 为什么函数 foo 不能正确返回?
- splunk - 获取一组 splunk 事务的平均持续时间
- sql-server - 从 VBA 连接数据库
- r - R make `table` 命令与额外的 `amount` 列一起使用
- javascript - Firestore 一个范围查询,按不同字段排序
- css - 更改 javafx 按钮的背景颜色会禁用悬停、聚焦等
- c - 在编译包含的 c 代码时需要使用额外的选项
- c# - 使用 Lambda 重写 Action 的异常函数?
- r - 如何使用 dplyr 减去 R 中的列中的特定值