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,还是我的想法不正确?
您需要使用EXISTS
和CASE..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