2013-08-19 2 views
-4

ПользуетсяИспользование 'OR' и 'И' в SQL Server

(Condition A or Condition B and Condition C)

такой же, как

(Condition A and Condition C) OR (Condition B and Condition C)

+2

Почему бы вам не попробовать и не вернуться к нам? – Rushyo

+3

Независимо от ответа, я всегда абсолютно рекомендую вставлять парны при смешивании условий AND и OR на любом языке. Чтение чрезвычайно важно. –

+0

Я жду, когда данные будут перенесены, и я думал о запросе в моей голове. – user2554301

ответ

3

No. Первое условие:

(Condition A) OR (Condition B and Condition C) 

И второе:

(Condition A and Condition C) OR (Condition B and Condition C) 

Вы можете четко видеть разницу между ними.

1

первым предполагает, что a или B and C это должно соответствовать

вторая предполагает, что a and c ИЛИ b and c являются должны соответствовать

(А) или (В и С) *IS NOT* (A и C) или (B и C)

надеюсь, что это будет больше.

+1

Я действительно не понимаю, почему вы говорите, что первое условие - '(A или B) и (C)'. «И» имеет более высокий приоритет, поэтому первое условие, как написано, - «A или (B и C)» – Lamak

+0

. Ваше право, я сделал это немного, чтобы быстро поблагодарить за улов. –

+0

Помимо того, что это неправильно, неправильно. Составьте таблицу истинности для '(A или B) и C' и для' (A и C) или (B и C) ', и вы увидите, что они логически эквивалентны. – Michelle

1

Коренная проблема заключается в том, что вы должны включать в себя парнеры при смешивании операторов. Поскольку and имеет преимущество, как написано, вы просите ли

(A or (B and C)) 

эквивалентно

((A and C) or (B and C)) 

... и ответ нет. В случае, когда A, B, and C равно true, false, and false, первое условие оценивается как true, тогда как второе оценивается как false.

Для того, чтобы сделать их эквивалент, вы можете добавить скобки первое выражение, как это:

((A or B) and C) 

В этом случае для каждой комбинации значений для A, B, and C, он будет оценивать и то же значение, как ((A and C) or (B and C)) ,

+0

+1 за то, что нашли время, чтобы на самом деле ** объяснить **, почему они не эквивалентны, я был слишком ленив в своем ответе – Lamak