我创建了一个查询,如果我在ORDER BY语句上方加引号,则不会显示任何结果,但是如果删除WHERE查询中的引号,ORDER BY语句将起作用,但是我需要在哪里查询。
例如:
WHERE S.STUDENT_ID = E.STUDENT_ID AND Z.STATE = 'New York' OR Z.STATE = 'MA'
ORDER BY Z.ZIP;
如果我删除了AND Z.STATE = 'New York' OR Z.STATE = 'MA'
,就可以了
答案 0 :(得分:3)
由于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;
这避免了使用括号的必要,因此您不会出错。