2011-08-08 4 views
4

それが大きな違いを作るん:対ORキーワード

WHERE [Process Code] = 1 AND ([Material ID] = 'PLT' OR [Material ID] = 'BMI') 

--or 

WHERE [Process Code] = 1 AND [Material ID] IN ('PLT', 'BMI') 

は、私は1つの代わりに、他を使用する時間があるだろうか?

答えて

4

あなたが指定した例では、まったく同じことを行っています(結果は同じ実行計画になります)。しかし、後者の構文で(より簡潔であることに加えて)あなたはこれを行うことができます:私は最初のオプションを使用することになり、時間を考えることはできません

WHERE [Process Code] = 1 AND [Material ID] IN (SELECT ID FROM Material WHERE Type = @type) 
5

。 2番目のオプションははるかにクリーンで表現力豊かです。そして、それをサブセレクトに変換する必要がある場合は、それを行う方が簡単になります。

1

INは、束のOR'sの単なる構文的な砂糖です。 ANDまたはORの方が高い演算子優先順位を持っているかどうかについて考える必要はありません。なぜなら、読みやすくなるからです。INは、通常はお勧めです。

1

クエリの実行計画は通常どちらの方法でも同じです。比較を実行する前に、ヌル(ISNULL(@parm,'')またはISNULL([fieldname],'')など)の式を確認することがあります。

Microsoftが警告している: を比較しているサブクエリや式によって返さ

どれNULL値が返りUNKNOWNのInまたはNOTを使用してtest_expressionします。 null の値をINまたはNOT INと共に使用すると、予期しない結果が生じる可能性があります。

関連する問題