【问题标题】:ignoring condition in where clause in mysql忽略mysql中where子句中的条件
【发布时间】:2015-04-14 09:32:08
【问题描述】:

我们可以在mysql中编写条件where子句吗? 我知道一种方法,即使用 CASE WHEN

但我的条件是如果 where 子句失败则忽略它并执行查询,因为没有 where 子句

例如。 我想选择特定城市的人。但如果我输入 city null 作为输入,则忽略该语句并返回所有城市中的所有人

谁能告诉我怎么做

请帮忙!!

【问题讨论】:

  • 你是在写sql还是jpql?

标签: mysql jpa


【解决方案1】:

这样的?

select p from Person p where (:city is null or p.city = :city)

【讨论】:

  • 但这会给我城市在 db 中为空的位置(可能)
  • 我不确定我是否理解。如果您将null 传递给:city 参数,它将为您提供所有人员作为结果。如果您为:city 传递任何其他值,它将按该值过滤人员。你能解释一下什么不能按预期工作吗?
  • 也许这是您的困境 - 如果您将null 作为参数值传递,则条件的第一部分将为真(:city is null)所以,由于or,整个条件计算为无论第二部分(p.city = :city)如何,都为 true,因此根本不会对其进行评估。在这种情况下,整个查询相当于select p from Person p where true
  • 这太棒了...我以前没有想到这个...它总是像它评估为真和假并且您的查询相应地返回..它有效,我也理解登录...谢谢你
【解决方案2】:
select * from your_table
where @city is null 
or city = @city

【讨论】:

  • 但这会告诉我城市为空的地方
  • 否,仅当变量为空时。区分列名city和变量@city
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 2011-07-29
  • 2015-01-31
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多