我在編寫一個看起來應該很簡單的查詢時遇到了一些麻煩,但解決方案正在逃避我。Oracle查詢3個帶有2個外部連接的表格
我們有三個表(簡化這個問題的目的): 者 - 用戶名的表:
per_id number(10) - primary key, populated by a sequence
user_name varchar2(50)
user_id varchar2(15) - unique, basically the employee ID
work_assignments - 有點像船員外派,但更普遍的:
wa_id number(10) - primary key, populated by a sequence
wa_name varchar2(25)
current_assignments - 哪些用戶擁有哪些work_assignments;每用戶平均大約爲25的工作任務,但有些「幸運」的人有向上的150:
wa_id number(10)
per_id number(10)
我想寫一個查詢,將比較work_assignments兩個用戶中,一共有三個列。結果應該是這樣的:
WA_Name User_Name1 User_Name2
Crew A Bob Joe
Crew B Joe
Crew C Bob
基本上每個要麼兩個用戶都有,與誰擁有它的用戶(一個或多個)的姓名(或名稱)work_assignment。
這是我能想出最接近的(當然,我也拿出來與3子查詢,沒有工作一個醜陋的查詢,但是看起來應該有一個更優雅的解決方案):
select distinct * from (
select wa.name work_assignment,
per.name user_name1,
per2.name user_name2
from work_assignments wa join current_assignments ca on wa.wa_id = ca.wa_id
join current_assignments ca2 on wa.wa_id = ca2.wa_id
left outer join persons per on per.per_id = ca.per_id and per.user_id = 'X12345'
left outer join persons per2 on per2.per_id = ca2.per_id and per2.user_id = 'Y67890'
)
where user_name1 is not null or user_name2 is not null
order by 1;
這一個問題是,如果兩個用戶有一個工作任務,它顯示了3個記錄:一個是鮑勃,一個是喬,一個兩個:
WA_Name User_Name1 User_Name2
Crew A Bob Joe
Crew A Joe
Crew A Bob
請幫幫忙!
感謝, 丹
雖然我已經接受BobC的回答,但我仍然有興趣瞭解是否有人有不同的方法。謝謝! – AndyDan