使用 MySQL 查询时,经常会遇到需要排除特定值的情况使用“NOT IN”运算符从结果集中获取。为此,您可以设置一个变量来保存排除值的列表。但是,以正确的格式定义变量对于确保查询成功执行至关重要。
考虑以下查询:
SET @idcamposexcluidos='817,803,495'; WHERE id_campo not in (@idcamposexcluidos)
上面的查询尝试将名为 @idcamposexcluidos 的变量设置为值列表,然后在“NOT IN”子句中使用该变量。但是,如果未以适当的格式定义变量,则可能会导致错误或不正确的结果。
“NOT IN”运算符需要括号内的单独值列表,而变量 @idcamposexcluidos 包含逗号- 分隔的字符串。这种不匹配会导致查询的编译和执行不正确。
要解决此问题,主要有两种方法:
1.动态 SQL:
动态 SQL 允许您在运行时动态构建查询字符串,包括排除值的列表。此方法可确保查询正确格式化并执行。
SET @sql = CONCAT('WHERE id_campo not in (', @idcamposexcluidos, ')'); PREPARE stmt FROM @sql; EXECUTE stmt;
2. FIND_IN_SET 函数:
MySQL 提供了一个名为 FIND_IN_SET 的函数,可用于检查逗号分隔字符串中是否存在某个值。通过使用此函数,您可以避免将变量转换为正确的列表。
SET @idcamposexcluidos='817,803,495'; WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0
虽然 FIND_IN_SET 函数是处理这种情况的便捷方法,但需要注意的是它不能使用索引执行检查时。这可能会导致大型数据集的性能降低。
以上是如何通过 MySQL 的'NOT IN”运算符正确使用变量?的详细内容。更多信息请关注PHP中文网其他相关文章!