2012-08-05 60 views
-3

我正在嘗試在oracle中進行nonequi加入,以顯示員工姓名,職業和具有B1,B3和B4性能等級的員工的獎金值。Nonequi加入oracle

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

我沒有運氣,不斷收到錯誤,任何幫助將不勝感激。

+2

再次,您的**表之間沒有連接**。你有沒有打擾閱讀手冊? http://docs.oracle.com/cd/E11882_01/server.112/e26088/queries006.htm#i2054012 – 2012-08-05 10:34:21

+2

看着你的問題,你似乎並沒有掌握'join'的基本知識......我會高度評價建議學習select語句的基礎知識。 – Ben 2012-08-05 10:42:22

+1

@jeremy你一直在問的問題是非常基本的。在開始發佈SO中的一堆問題之前,您應該開始學習Oracle基礎知識。這裏是一個簡短的教程,將向您展示基礎知識http://www.mathcs.emory.edu/~cheung/Courses/377/Others/tutorial.pdf – Annjawn 2012-08-05 16:55:24

回答

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