目标
Where
如果我的存储过程的两个参数都不为空,则只需填写子句。
问题
查看以下查询片段:
If(userEmail Is Not Null Or userMarketId Is Not Null)
Where
Then
Case When
userEmail = ''
Then user.MarketId = userMarketId
Else user.Email = userEmail
End = 1
End If;
语法是错误的——只是为了说明——但上下文正是我所想的。
我能做些什么来达到我的目标,伙计们?我的意思是,执行我想做的事情的正确语法是什么?
场景
好的,这里似乎有些不清楚,我将再解释一下。
如果过程()的第一个参数
userEmail
被填充,那么我的Where
子句将基于userEmail
。如果过程()的第二个参数
userMarketId
被填充,那么我的Where
子句将基于userMarketId
。如果我的两个参数都是空的,那么就没有
Where
子句。(填充的两个参数永远不会发生)
换句话说,或一个参数,或另一个,或没有。
情况
这个过程被称为getUsers
。如果用户对应用程序执行身份验证并检索用户信息,则会调用它。
如果用户是管理员,那么他可以访问在应用程序上注册的用户列表。要获取此用户列表,我使用相同的查询,因为我想要获取的列与单个用户相同。
为了分离查询的建议,我认为我需要使用Case
/If
来“播放”(存储过程的)参数。
代码聚焦
遵循完整的存储过程:
BEGIN
Select user.Id as userId,
userPersonal.Firstname as userFirstname,
userPersonal.Lastname as userLastname
From app_users as user
If(userEmail Is Not Null Or userMarketId Is Not Null)
Where
Then
Case When
userEmail = ''
Then user.MarketId = userMarketId
Else user.Email = userEmail
End = 1
End If;
END
技术细节
我正在使用MySQL
.