我正在尝试在检查是否已经使用用户名或电子邮件时优化此查询。
更优化,因为我相信可以创建一个查询来实现这个目标吗?
select
(select count(Username) from User where Username = @Username) > 0 as "UsernameExist"
(select count(Email) from User where Email = @Email) > 0 as "EmailExist"
下面的查询不起作用,因为如果用户名和电子邮件是针对不同的用户,我仍然会得到1个
select count(Username), count(Email)
from User
where Username = @Username or Email = @Email
答案 0 :(得分:0)
它被称为条件计数,你可以使用sum()或count()和条件语句作为参数。我将用sum()给你一个例子:
select sum(if(Username=@Username,1,0)), sum(if(Email=@Email,1,0))
from User
where Username = @Username or Email = @Email
您可以在sum()中使用case语句而不是if()函数。
但是,我不确定这种方法是否比使用多个查询更有效。老实说,我会使用您在原始查询中作为子查询的2个查询的并集。