尝试使用逗号分隔的值列表填充表变量并将其用作“NOT IN”过滤器会出现常见的障碍。了解此操作的正确语法和限制至关重要。
如原始查询所示,将变量设置为逗号分隔的值列表:
SET @idcamposexcluidos='817,803,495';
随后尝试在“WHERE NOT IN”条件下使用它:
WHERE id_campo not in (@idcamposexcluidos)
通常会导致错误或意外的结果。
问题的关键在于 IN 子句对不同值的期望。然而,使用逗号分隔的字符串作为参数会在 IN 子句中有效地编译为单个字符串,从而导致不正确的比较。
要克服这个问题,必须使用动态 SQL 或使用 MySQL 的 FIND_IN_SET() 函数:
SET @idcamposexcluidos='817,803,495'; ... WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0
虽然 FIND_IN_SET() 提供了一种解决方法,但它也有其局限性。与使用索引不同,它需要对值列表进行线性搜索,从而导致性能下降。
以上是如何在 MySQL 中正确使用'NOT IN”与值列表?的详细内容。更多信息请关注PHP中文网其他相关文章!