3

SQL には短絡構文と階層的な複数評価構文の両方がありますか?

短絡割り当ての例。decision... が true の場合、最初の *** 句を取得します。

短絡

   case  
     when (...) then (***) 
     when (...) then (***)
     when (...) then (***)
     else (...)
   end as decision

階層割り当ての例。ここでdecisionは、... が true の場合に LAST *** 式を取得します。

階層的

    if (...) then (decision = ***) end
    if (...) then (decision = ***) end
    if (...) then (decision = ***) end

相互変換

式の順序を逆にすると、階層と短絡が切り替わることは明らかです。SQL にも LAST tr 式を割り当てる構造があるかどうか疑問に思っていますか?

テストケース:

以下は、非常に単純なおもちゃの例です。

select 
  flag1, flag2, flag3,
  case
     when flag1=1 and flag2=0 then 'LEFT'
     when flag1=0 and flag2=0 then 'NONE'
     when flag2=0 and flag3=1 then 'RIGHT'
  end as decision 
FROM 
( select 
  1 as flag1, 0 as flag2, 1 as flag3
  -- from dual                               -- if you use Oracle
) tmp ;

短絡 SQL は 'LEFT' を返します

階層割り当ては「RIGHT」を返します。

編集:リンクをクリックすると、この例をSQL-Fiddleで実行できます。(その便利なサイトを指摘してくれた ypercube に感謝します! (+1))

4

2 に答える 2

3

1 つの選択で階層割り当てを行う式はありませんが、複数の if ステートメントを使用して、他のプログラミング言語と同じように実現できます。

DECLARE @flag1 BIT = 1, @flag2 BIT = 0, @flag3 BIT = 1, @decision VARCHAR(50)

IF @flag1 = 1 AND @flag2 = 0
    SET @decision = 'LEFT'

IF @flag1 = 0 AND @flag2 = 0
    SET @decision = 'NONE'

IF @flag2 = 0 AND @flag3 = 1
    SET @decision = 'RIGHT'

SELECT @decision
于 2013-01-11T23:04:13.860 に答える
-1

CASE WHENSQL の場合、句に値が 1 つしかないため、これはあまり重要ではありません。したがって、条件を再調整するだけです。

他の言語では、変数などに格納される計算を行いますが、純粋なSQL ではそうではありません。

于 2013-01-11T23:08:23.497 に答える