【发布时间】:2015-04-14 09:32:08
【问题描述】:
我们可以在mysql中编写条件where子句吗? 我知道一种方法,即使用 CASE WHEN
但我的条件是如果 where 子句失败则忽略它并执行查询,因为没有 where 子句
例如。 我想选择特定城市的人。但如果我输入 city null 作为输入,则忽略该语句并返回所有城市中的所有人
谁能告诉我怎么做
请帮忙!!
【问题讨论】:
-
你是在写sql还是jpql?
我们可以在mysql中编写条件where子句吗? 我知道一种方法,即使用 CASE WHEN
但我的条件是如果 where 子句失败则忽略它并执行查询,因为没有 where 子句
例如。 我想选择特定城市的人。但如果我输入 city null 作为输入,则忽略该语句并返回所有城市中的所有人
谁能告诉我怎么做
请帮忙!!
【问题讨论】:
这样的?
select p from Person p where (:city is null or p.city = :city)
【讨论】:
null 传递给:city 参数,它将为您提供所有人员作为结果。如果您为:city 传递任何其他值,它将按该值过滤人员。你能解释一下什么不能按预期工作吗?
null 作为参数值传递,则条件的第一部分将为真(:city is null)所以,由于or,整个条件计算为无论第二部分(p.city = :city)如何,都为 true,因此根本不会对其进行评估。在这种情况下,整个查询相当于select p from Person p where true
select * from your_table
where @city is null
or city = @city
【讨论】:
city和变量@city