mysql - SQL 查询使用多个条件和 LIKE 通配符

标签 mysql sql

我正在尝试检查我的数据库中是否存在所涉及的人名之一(1、2、3 或 4)。我尝试了以下查询,但它没有按我想要的方式工作。

SELECT *
FROM db.cases
WHERE (inv_person_name_1 OR inv_person_name_2 OR inv_person_name_3 OR inv_person_name_4) LIKE '%something%'

我也不能使用类似的东西

SELECT *
FROM db.cases
WHERE inv_person_name_1 LIKE '%something%'
      OR inv_person_name_2 LIKE '%something%'
      OR inv_person_name_3 LIKE '%something%'
      OR inv_person_name_4 LIKE '%something%'

因为它不符合我的程序需求。我只需要一个 LIKE '%something%'

最佳答案

假设您使用的是 C#(因为它当前已标记),您需要使用 SqlParameters 格式化您的查询:

SELECT * FROM db.cases 
WHERE inv_person_name_1 LIKE {0} 
OR inv_person_name_2 LIKE {0} 
OR inv_person_name_3 LIKE {0} 
OR inv_person_name_4 LIKE {0};

或者:

SELECT * FROM db.cases 
WHERE inv_person_name_1 LIKE @name 
OR inv_person_name_2 LIKE @name 
OR inv_person_name_3 LIKE @name  
OR inv_person_name_4 LIKE @name;

在这种情况下,您需要执行 cmd.BindByName = true; (请参阅 better way of using a single parameter multiple times in c# )

另一种丑陋的替代方案,但如果您的 LIKE 始终采用 %something% 格式(即之前和之后的通配符),您可以这样连接名称:

SELECT * FROM db.cases 
WHERE (inv_person_name_1 || '+' || inv_person_name_2 || '+' || inv_person_name_3 || '+' || inv_person_name_4) LIKE @name;

SELECT * FROM db.cases 
WHERE CONCAT_WS('+', inv_person_name_1, inv_person_name_2, inv_person_name_3, inv_person_name_4) LIKE @name;

关于mysql - SQL 查询使用多个条件和 LIKE 通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23067582/

相关文章:

mysql - 组合 "LIKE"、 "NOT LIKE"和 "OR"

mysql - 创建一个像普通表一样的临时表

MySQL 查询 - 如何从其他表中获取基于 "views"、 "likes"和 "shares"的趋势行?

php - 如何使用单个准备好的语句获取刚刚插入的行的 id?

MySQL 循环更新

php - 如何检查数据库中已有的空表

sql - 根据找到匹配项的位置动态按列对结果进行排序

php - 我可以在同一页面上使用多个内容类型吗?

Android 在使用 ContextMenu 传递 ListView 中所选项目的 id 时出错

mysql - 如何简化我的 SQL 请求?