我在编写一个看起来应该很简单的查询时遇到了一些麻烦,但解决方案正在逃避我。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