1

次のようなステートメントを作成したいと思います。

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

4 に答える 4

3

と の組み合わせを使用する必要があり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

それらの実際のステートメントがどうあるべきかの例をいくつか示すことができれば、より具体的な答えを提供できます.

于 2013-03-06T19:37:35.353 に答える
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
于 2013-03-06T19:44:40.150 に答える
1

同じ存在をチェックしているので、ここでida を実行できると思いますUNION

select *
from products 
where p.id in  (select id from table1
                union 
                select id from table2)
于 2013-03-06T19:47:59.487 に答える
1

パフォーマンスの問題を回避するために、2 つの条件の間に 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)    

ステートメントの性質によっては、2 番目の選択で Not Exists を省略できる場合があります。

于 2013-03-06T19:55:53.430 に答える