C# if条件中的sql select语句

C# if条件中的sql select语句,c#,sql-server,tsql,if-statement,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 }

我想创建一个如下所示的语句:

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

您需要结合使用EXISTS和CASE..END:

可能的位置:从Id=123的客户中选择*

可能是:从someTable中选择MINfield

可能是:选择0作为默认值


如果你能展示一些你想要这些实际陈述的例子,我可以提供一个更具体的答案。

你需要结合使用EXISTS和CASE..END:

可能的位置:从Id=123的客户中选择*

可能是:从someTable中选择MINfield

可能是:选择0作为默认值


如果您能展示一些您希望这些实际语句是什么样的示例,我可以提供一个更具体的答案。

实际上,出于性能考虑,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

实际上,出于性能考虑,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存在,我想你可以在这里建立一个联盟


既然你正在检查相同的id存在,我想你可以在这里建立一个联盟


我建议您在两个条件之间使用联合,以帮助避免性能问题……并且可能更易于阅读

    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)    

根据语句的性质,您可能可以在第二个选择中省去notexists。

我建议在两个条件之间使用联合,以帮助避免性能问题……并且可能更易于阅读

    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)    

根据语句的性质,您可能可以在第二个select中省去Not Exists。

我猜您希望使用C对数据库运行此操作?此select语句的上下文是什么?您是否正在测试存储过程中的可选参数?我猜想您希望使用C对数据库运行此操作?此select语句的上下文是什么?您正在测试存储过程中的可选参数吗?谢谢!这就是我需要开始的一切。在我的情况下,内部的问题让人困惑,但我已经解决了。谢谢!这就是我需要开始的一切。在我的例子中,内部的问题令人困惑,但我把它们弄明白了。