运行查询时无结果

时间:2018-10-25 14:30:09

标签: sql sql-order-by oracle-sqldeveloper where-clause

我创建了一个查询,如果我在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',就可以了

1 个答案:

答案 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;

这避免了使用括号的必要,因此您不会出错。