[英]Oracle SQL - WHERE Clause
我是新来的,如果可以更好地措辞,请原谅我。
我需要返回以下任何人的详细信息:
'C' 级和工资不等于 9.00
或者
'D' 级和工资不等于 9.75
例如
SELECT
paam.ASSIGNMENT_NUMBER,
cs.SALARY_AMOUNT,
pgf.NAME Grade
FROM
CMP_SALARY cs,
PER_ALL_ASSIGNMENTS_M paam,
PER_GRADES_F_TL pgf
WHERE
pgf.GRADE_ID = paam.GRADE_ID
AND cs.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND (pgf.name = 'C' AND cs.SALARY_AMOUNT <> '9.00')
or (pgf.name = 'D' AND cs.SALARY_AMOUNT <> '9.75')
您可以提供的任何帮助将不胜感激。 :)
问题是逻辑优势。 or
的优先级低于and
,因此您需要用括号将整个or
条件括起来。
所以基本上改变这个:
WHERE
pgf.GRADE_ID = paam.GRADE_ID
AND cs.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND (pgf.name = 'C' AND cs.SALARY_AMOUNT <> '9.00')
OR (pgf.name = 'D' AND cs.SALARY_AMOUNT <> '9.75')
至:
WHERE
pgf.GRADE_ID = paam.GRADE_ID
AND cs.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND (
(pgf.name = 'C' AND cs.SALARY_AMOUNT <> '9.00')
OR (pgf.name = 'D' AND cs.SALARY_AMOUNT <> '9.75')
)
内括号不是严格需要的(出于上述原因),但它们使意图更清晰。
我还建议重写查询以使用标准的显式连接,而不是老式的隐式连接。 顺便说一句,这消除了优势问题:
SELECT
paam.ASSIGNMENT_NUMBER,
cs.SALARY_AMOUNT,
pgf.NAME Grade
FROM CMP_SALARY cs
INNER JOIN PER_ALL_ASSIGNMENTS_M paam
ON cs.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
INNER JOIN PER_GRADES_F_TL pgf
ON pgf.GRADE_ID = paam.GRADE_ID
WHERE
(pgf.name = 'C' AND cs.SALARY_AMOUNT <> '9.00')
OR (pgf.name = 'D' AND cs.SALARY_AMOUNT <> '9.75')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.