我正在尝试在甲骨文中进行非加入,以显示性能等级为B1,B3和B4的员工的员工姓名,等级和奖金价值。
SELECT Name, Grade, BonusPercent,
FROM STAFFING, STAFF BONUS, STAFF,
WHERE PerformanceGrade = B1, B3, B4;
我没有运气并且不断收到错误,我们将非常感谢任何帮助。
答案 0 :(得分:3)
Once again你得到的错误是因为一个不应该出现的尾随逗号。
此外,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
然而,我无法强调这一点,这个查询实际上你想要的几率是最小的。这将为您提供所有三个表中的Cartesian product,即每个工作人员您获得的每个奖金。不是你想要的。
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)
这显然是完全弥补的,因为我不知道你的桌子是什么样的,但应该给你一个大致的想法。
我强烈建议您阅读joins和basic SQL syntax。