-4

我正在尝试在 oracle 中进行 nonequi join,以显示绩效等级为 B1、B3 和 B4 的员工的员工姓名、等级和奖金价值。

SELECT Name, Grade, BonusPercent,  
  FROM STAFFING, STAFF BONUS, STAFF,  
   WHERE PerformanceGrade = B1, B3, B4; 

我没有运气并且不断出错,任何帮助将不胜感激。

4

1 回答 1

3

您再次遇到的错误是因为不应该存在的尾随逗号。

此外,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)

这显然是完全虚构的,因为我不知道你的桌子是什么样子,但应该给你一个大致的想法。

我强烈建议阅读连接基本 SQL 语法

于 2012-08-05T10:51:20.630 回答