以下の 2 つのステートメントは同等ですか?
SELECT [...]
FROM [...]
WHERE some_col in (1,2,3,4,5) AND some_other_expr
そして
SELECT [...]
FROM [...]
WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr
これを検証するために使用できる何らかの真理値表はありますか?
ベストアンサー1
And
は よりも優先されるOr
ため、たとえa <=> a1 Or a2
Where a And b
は同じではありません
Where a1 Or a2 And b,
それは次のように実行されるからです
Where a1 Or (a2 And b)
これらを同じにするには、次のようになります (優先順位のルールを無効にするために括弧を使用します)。
Where (a1 Or a2) And b
以下に例を挙げて説明します。
Declare @x tinyInt = 1
Declare @y tinyInt = 0
Declare @z tinyInt = 0
Select Case When @x=1 OR @y=1 And @z=1 Then 'T' Else 'F' End -- outputs T
Select Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- outputs F
参考文献を参照したい人向け(アルファベット順):