Из-за порядка правил операций в SQL AND
имеет более высокий приоритет , чем OR
, поэтому ваше текущее предложение WHERE
интерпретируется следующим образом:
WHERE (S.STUDENT_ID = E.STUDENT_ID AND Z.STATE = 'New York') OR Z.STATE = 'MA'
ORDER BY Z.ZIP;
Таким образом, это будет верно только в том случае, если идентификаторы учащихся соответствуют и , штат Нью-Йорк.Вы, вероятно, намереваетесь сделать следующее:
WHERE S.STUDENT_ID = E.STUDENT_ID AND (Z.STATE = 'New York' OR Z.STATE = 'MA')
ORDER BY Z.ZIP;
Один прием, который вы могли бы использовать здесь, чтобы избежать этой ловушки, заключался бы в использовании WHERE IN (...)
:
WHERE S.STUDENT_ID = E.STUDENT_ID AND Z.STATE IN ('New York', 'MA')
ORDER BY Z.ZIP;
Это исключает необходимость даже использоватьскобки, чтобы вы не ошиблись.