2015-10-16 85 views
0

我正在嘗試進行一個查詢,將一個工作在同一地點的工作人員配對。關係模型我問這個樣子的:顯示在另一個表中具有相同值的對

員工(EmNum,名)
工作(FiNum *,EmNum *
場(FiNum,標題)
(粗體表示主鍵)

現在我的代碼看起來像

SELECT work.finum, e1.name,e1.emnum,e2.name,e2.emnum 
FROM employee e1 
INNER JOIN employee e2 
    on e1.EmNum = e2.EmNum 
INNER JOIN work 
    on e1.emnum = work.emnum 

釷是給我造成像

| finum | name | emnum | name_1 | emnum_1 | 
| 1 | a | 1 | a | 1 | 
| 1 | b | 2 | b | 2 | 
| 2 | c | 3 | c | 3 | 
| 3 | d | 4 | d | 4 | 
| 3 | e | 5 | e | 5 | 

,而我想要的結果是一樣

| finum | name | emnum | name_1 | emnum_1 | 
| 1 | a | 1 | b | 2 | 
| 1 | b | 2 | a | 1 | 
| 3 | d | 4 | e | 4 | 
| 3 | e | 5 | d | 5 | 

我很新的SQL所以我真的不能想辦法做到這一點。任何幫助或輸入都會有幫助。

感謝

+1

您應該只選擇一個rdbms不是3. –

+0

,您的預期結果的最後2行'emnum_1'應該分別是5和4。我對嗎 ? – wiretext

+0

哦,是的,它應該是5和4.對不起 –

回答

0

你的問題稍微不清楚,但我的猜測是,你正在試圖發現在同一地點=工作同finum,但不同的行工作的員工。你可以做這樣:

SELECT w1.finum, e1.name,e1.emnum, e2.name,e2.emnum 
from work w1 
join work w2 on w1.finum = w2.finum and w1.emnum != w2.emnum 
join employee e1 on e1.emnum = w1.emnum 
join employee e2 on e2.emnum = w2.emnum 

如果你不想重複記錄(1 < - > 2 + 2 < - > 1變化=在加盟>或<!)

+0

哦,男人非常感謝。我剛開始使用sql,所以我猜我的邏輯還沒有。謝謝! –

0

我試圖做一個查詢,配對工作在同一個地方的工人。

推測「地點」由Field表代表。如果你想在這個基礎上配對員工,那麼你應該執行一個條件相同的現場數字加盟,而不是以員工數量相同爲條件。

它看起來像你的主要聯接想成爲WorkWork與匹配FiNum記錄的自聯接。要在結果中獲得員工姓名,則還需要加入Employee兩次。爲避免員工與自己配對,您需要通過WHERE條款過濾這些案例。

相關問題