2017-07-14 13 views
0

where節に渡そうとしている2つの変数があります。SQL "and/or" - どちらの順序?

where (DeptValue = @DeptValue and AccValue = @AccValue) or (DeptValue = @DeptValue) 

上記は機能していないようです。私は@Deptvalueを渡すと、すべてのAcctレコードが返ってくるDeptを返すところで結果を得ようとしています。しかし、@DeptValueと@AcctValueが存在する場合は、Acctを持つDeptのみが返されます。

助けてください。ありがとう

答えて

4

DeptValueを最初にチェックし、存在する場合はAccValueをチェックすることができます。

where (DeptValue = @DeptValue) and (@AccValue is null or AccValue = @AccValue) 
+1

2番目の句の別の構文は 'and(AccValue = COALESCE(@AccValue、AccValue))' –

+0

ありがとう!これはAccValueの順序を変更したときにのみ機能します。何故ですか? –

+0

@Kay_e_n重要な注文ではありません。 DeptValueが最初にマッチングされ、AccValueがある場合はそれを比較する必要があります。 – Xiaosu

0

Operator precedence

Level Operators 
1  ~ (Bitwise NOT) 
2  * (Multiply),/(Division), % (Modulo) 
3  + (Positive), - (Negative), + (Add), (+ Concatenate), - (Subtract), & (Bitwise AND),^(Bitwise Exclusive OR), | (Bitwise OR) 
4  =, >, <, >=, <=, <>, !=, !>, !< (Comparison operators) 
5  NOT 
6  AND 
7  ALL, ANY, BETWEEN, IN, LIKE, OR, SOME 
8  = (Assignment) 

しかし、それは通常、むしろ優先に頼るよりも、注文操作を表現するために括弧を使用することがベストプラクティスと考えられています。