我正在尝试在 oracle 中进行 nonequi join,以显示绩效等级为 B1、B3 和 B4 的员工的员工姓名、等级和奖金价值。
SELECT Name, Grade, BonusPercent,
FROM STAFFING, STAFF BONUS, STAFF,
WHERE PerformanceGrade = B1, B3, B4;
我没有运气并且不断出错,任何帮助将不胜感激。
您再次遇到的错误是因为不应该存在的尾随逗号。
此外,STAFF BONUS
它不是有效的表名,因为中间有一个空格,并且一个值不能等于三个逗号分隔的值。您需要使用该in
函数,它是 3 个 OR 的逻辑等价物。
SELECT Name, Grade, BonusPercent -- NO TRAILING COMMA
FROM STAFFING, STAFF_BONUS, STAFF -- NO TRAILING COMMA, NO SPACE IN TABLE NAME
WHERE PerformanceGrade in (B1, B3, B4) -- USE IN
但是,我不能足够强调这一点,这个查询实际上是你想要的可能性很小。这将为您提供所有三个表的笛卡尔积,即,对于每个工作人员,您都会获得所有奖金。不是你想要的。
JOIN
使用公共列将表放在一起更正常。例如
select staff.name, staff.grade, staff_bonus.bonuspercent
from staffing
join staff
on staffing.id = staff.staffing_id
join staff_bonus
on staff_bonus.id = staff.bonus_id
where PerformanceGrade in (B1, B3, B4)
这显然是完全虚构的,因为我不知道你的桌子是什么样子,但应该给你一个大致的想法。