在 MySQL 中,构建基于预定义列表排除特定值的查询可以很棘手。此问题深入探讨分配变量以包含排除值的逗号分隔列表并在“NOT IN”子句中使用它的问题。
不正确的变量格式
正如问题中提到的,以各种格式分配变量并不成功,要么导致错误,要么忽略值。以下是尝试的格式:
The问题
挑战在于如何在查询中编译“IN”子句。使用该变量时,它会编译为单个字符串:WHERE id_campo not in ('817,803,495')。但是,“NOT IN”子句的正确格式需要单独的值: WHERE id_campo not in ('817','803','495').
解决方案:使用 FIND_IN_SET()
为了解决这个问题,MySQL 提供了 FIND_IN_SET() 函数,它允许排除基于变量中定义的列表。修改后的查询如下所示:
SET @idcamposexcluidos='817,803,495'; ... WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0
此解决方案成功排除 id_campo 值与 @idcamposexcluidos 变量中的任何值匹配的行。
注意: FIND_IN_SET() 解决了这个问题,它阻止在 id_campo 列上使用索引。
以上是如何在'NOT IN”子句中使用带有逗号分隔列表的 MySQL 变量?的详细内容。更多信息请关注PHP中文网其他相关文章!