我需要编写一个从表中获取一组信息的查询,但如果没有该特定客户端的信息,则使用默认集.我想知道是否有办法避免if(exists())语句中的查询重复.
例如:
IF( EXISTS( SELECT * FROM UserTable WHERE Name = @UserName))
BEGIN
SELECT * FROM UserTable WHERE Name = @UserName))
END
ELSE
BEGIN
SELECT * FROM UserTable WHERE Name = 'Jon Skeet'))
END
Run Code Online (Sandbox Code Playgroud)
前两个选择(存在和if的真实部分)完全相同.如果语句为true,我想避免两次运行相同的查询.我知道一旦满足第一个真实条件就存在停止,但这仍然是O(n)最坏的情况.
我知道的另一个选项是将信息放在临时表中并检查信息是否存在,如果没有返回默认信息.
两种方式都可以,但最好的方法是什么?还有其他方法吗?有没有办法在WHERE子句中执行此操作,因为这是唯一不同的东西?
编辑:修复示例返回行而不仅仅是单个项.因此,将select转储到单个变量的答案将等于我假设的临时表.另外,为了不激怒Jon Skeet,他的名字拼写正确
sql ×1