Nonequi加入了oracle

时间:2012-08-05 10:29:59

标签: sql oracle

我正在尝试在甲骨文中进行非加入,以显示性能等级为B1,B3和B4的员工的员工姓名,等级和奖金价值。

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

我没有运气并且不断收到错误,我们将非常感谢任何帮助。

1 个答案:

答案 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)

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

我强烈建议您阅读joinsbasic SQL syntax