if条件下的sql select语句

时间:2013-03-06 19:35:31

标签: c# sql-server tsql if-statement

我想创建如下语句:

if (select statement1 returns rows){
   select statement2
}
else {
  select statement3
}

if语句是更大查询的一部分

   select from products where p.id in (
        if (select statement1 returns rows){
           select statement2
       }
       else {
        select statement3
      }

这在SQL Server中是否可行,或者我的想法不正确?

4 个答案:

答案 0 :(得分:3)

您需要结合使用EXISTSCASE..END

select *
from products
where p.id in (
  case when (exists ( <statement1> ))
    then ( <statement2> )
    else ( <statement3> )
  end
)

<statement1>可能是:SELECT * FROM Customer WHERE Id = 123

<statement2>可能是:SELECT MIN(field) FROM someTable

<statement3>可能是:SELECT 0 as DefaultValue

如果您能够展示一些您希望这些实际陈述的例子,我可以提供更具体的答案。

答案 1 :(得分:1)

实际上,由于性能方面的考虑,SQL更加严格。您的查询将更像这样:

select *
from products
where  1 = case when (exists ( <statement1> ))
              then case when p.id in ( <statement2> ) then 1 else 0 end
              else case when p.id in ( <statement3> ) then 1 else 0 end
           end

答案 2 :(得分:1)

由于您要检查相同的id存在,我认为您可以在此处UNION

select *
from products 
where p.id in  (select id from table1
                union 
                select id from table2)

答案 3 :(得分:1)

我建议在两个条件之间使用UNION以帮助避免性能问题......也可能更容易阅读。

    SELECT FROM products p
    WHERE EXISTS (SELECT STATEMENT1)
    AND EXISTS (SELECT STATEMENT2 s2 WHERE s2.p_id = p.id)
    UNION
    SELECT FROM products p
    WHERE NOT EXISTS (SELECT STATEMENT1)
    AND EXISTS (SELECT STATEMENT3 s3 WHERE s3.p_id = p.id)    

根据陈述的性质,您可以在第二次选择中取消不存在。