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语句的上下文是什么?您正在测试存储过程中的可选参数吗?谢谢!这就是我需要开始的一切。在我的情况下,内部的问题让人困惑,但我已经解决了。谢谢!这就是我需要开始的一切。在我的例子中,内部的问题令人困惑,但我把它们弄明白了。