运行 查询时无结果
No results when running query
我创建了一个查询,如果我在 ORDER BY 语句上方有一个带引号的语句,该查询将不会显示任何结果,但如果我删除 WHERE 查询中的引号,ORDER BY 语句将起作用,但我需要where 查询。
例如:
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'
它会起作用
由于 SQL 中的操作顺序规则,AND
比 OR
具有更高的 优先级 ,因此您当前的 WHERE
子句被解释为:
WHERE (S.STUDENT_ID = E.STUDENT_ID AND Z.STATE = 'New York') OR Z.STATE = 'MA'
ORDER BY Z.ZIP;
所以只有当学生 ID 匹配 并且 州是纽约时,这才会成立。您可能有以下意图:
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;
这避免了使用括号的需要,所以你不会出错。
我创建了一个查询,如果我在 ORDER BY 语句上方有一个带引号的语句,该查询将不会显示任何结果,但如果我删除 WHERE 查询中的引号,ORDER BY 语句将起作用,但我需要where 查询。
例如:
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'
它会起作用
由于 SQL 中的操作顺序规则,AND
比 OR
具有更高的 优先级 ,因此您当前的 WHERE
子句被解释为:
WHERE (S.STUDENT_ID = E.STUDENT_ID AND Z.STATE = 'New York') OR Z.STATE = 'MA'
ORDER BY Z.ZIP;
所以只有当学生 ID 匹配 并且 州是纽约时,这才会成立。您可能有以下意图:
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;
这避免了使用括号的需要,所以你不会出错。