mysql - 基于参数的条件 WHERE 语句?
问题描述
我正在尝试有条件WHERE
地在存储过程中创建一个子句。它充当布尔列上的过滤器,我只想要两个结果 - 要么只取真值,要么取所有它们(没有我只需要假值的情况)。
我试图使用的条款是这样的 -
WHERE
(@customerInactive = -1 OR `listcustomers`.`active` = 1)
这个想法要么参数是-1(无过滤器),要么我们确实有一个过滤器,应该做listcustomers.active = 1。
我也尝试更明确
WHERE
((@customerInactive = 1 AND `listcustomers`.`active` = 1) OR
(@customerInactive <> 1 AND 1=1))
第二个最终没有返回任何东西。我怎样才能解决这个问题?
这是在一个存储过程中,使用 MySQL 5.6。
编辑:鉴于我被告知我的第一个查询应该这样做,但它总是返回listcustomers
. active
= 1,这可能是类型问题吗?我将 customerInactive 设为 int(11)。我也只是尝试了一下(1),但我仍然遇到同样的问题,无论我的参数如何,我都得到了 TRUE 过滤器。或者在第二个查询的情况下,没有结果。
编辑2:我认为这无关紧要,但最终结果是多个表的联合,我将不得不对这些表进行同样的过滤。整个 SQL 查询可以在这里看到 - https://pastebin.com/6wL4ZtnF
解决方案
正确的答案是我混淆了参数和用户定义的变量。我将 customerInactive 作为参数传递给存储过程,所以我应该直接按名称引用它。使用@
它使它看起来像一个未定义的用户定义变量,因此我的初始相等性不断失败以及为什么真正的过滤器总是打开。感谢大家。
推荐阅读
- python - python中的id()函数和is运算符
- python - 你如何正确地从这个嵌套的 XML 中获取?
- reactjs - 为什么我的自定义钩子没有在路径更改时重新初始化?
- sql-server - 由于带有 SQL Server 配置文件的 Slick 中的表名周围有双引号,因此无法执行查询
- python - If 中的第二条语句没有被执行
- google-cloud-functions - 从 GCF 连接到 Google Cloud SQL 实例的最佳做法
- python - 为什么内置函数在 python 中没有被归类为可调用函数,如何让它们在我的程序中显示为可调用函数?
- r - R:循环删除 NA 只删除一些 NA?
- kotlin - 在 Kotlin 中使用委托实现时传递此引用
- azure - Azure Bot 框架 AAD 身份验证问题