if条件下的SQL选择语句

本文关键字:选择 语句 SQL 条件下 if | 更新日期: 2023-09-27 18:02:32

我想创建如下语句:

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,还是我的想法不正确?

if条件下的SQL选择语句

您需要使用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

如果你能举例说明你想要的语句是什么,我可以提供一个更具体的答案。

实际上,由于性能方面的考虑,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

由于您正在检查相同的id存在,我认为您可以在这里执行UNION

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

我建议在两个条件之间使用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)    

根据语句的性质,您可以在第二个选择中省略Not Exists