如何在Microsoft SQL SELECT查询中使用IF语句?

3

我在SQL方面是一个绝对的初学者。

例子:

我想进行一次查询,选择名字以X开头的人如果结果为0,我想选择名字以Y开头的人。

我该怎么做?谢谢。


那么,如果找到X的值的结果,你是说以Y开头的人名的结果不应该出现吗? - Nathan Tregillus
4个回答

3

我将问题理解为:如果没有以X开头的名称,则显示以Y开头的名称。

这个解决方案会非常快速,因为一旦找到1条记录就能立即停止查询。

if exists(select * from table where name like 'X%')
  begin
    select * from table where name like 'X%'
  end
else
  begin
    select * from table where name like 'Y%'
  end

理想情况下,为了使其发挥作用,应对名称列进行索引。

1
这段代码将会执行两次 'select * from table where name like 'X%'',这样的解决方案太过丑陋! - VMAtm
1
一旦在exists语句中命中第一条记录,它将立即进行快捷方式。就性能而言,它会很好,并且只返回一个结果集。 - Filip De Vos
Filip,你的理解是正确的。但我在MS SQL中没有看到任何IF或EXISTS关键字。我正在进行直接的SQL查询。我不会编写C或Basic代码。谢谢。 - user776676
IF: http://msdn.microsoft.com/en-us/library/ms182717.aspx ; EXISTS: http://msdn.microsoft.com/en-us/library/ms188336.aspxIF:http://msdn.microsoft.com/en-us/library/ms182717.aspx;EXISTS:http://msdn.microsoft.com/en-us/library/ms188336.aspx - robyaw
非常感谢你,robyaw。这表明我知道的很少。我将阅读你提供的页面。 - user776676

1

也许这是一个更好的解决方案:

select * from table where name like 'X%'

if @@ROWCOUNT = 0
   select * from table where name like 'Y%'

看起来很棒。我会试一试的。谢谢。 - user776676

0
这是一个基于集合的解决方案:
SELECT * 
  FROM table 
 WHERE NAME LIKE 'X%'
UNION
SELECT * 
  FROM table 
 WHERE NAME LIKE 'Y%'
       AND NOT EXISTS (
                       SELECT * 
                         FROM table AS T1
                        WHERE T1.NAME LIKE 'X%'
                      );

0

有一些方法可以在单个SQL语句中执行此操作,但它们非常昂贵(无论是时间还是资源)。最好使用存储过程来执行这种逻辑。


他们非常昂贵--我认为你更倾向于说它们是相对昂贵。例如,如果表的基数相对较低,则基于集合的解决方案的费用将绝对可以忽略不计。始终测试至少两个候选解决方案 :) - onedaywhen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接