У меня возникли проблемы с написанием запроса, который кажется, что он должен быть простым, но решение уклоняется от меня.Oracle Query на 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 - какие пользователи имеют какие рабочие_значения; в среднем на одного пользователя составляет около 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
Пожалуйста, помогите!
Спасибо, Dan
Хотя я принял ответ Боба, мне все равно было бы интересно узнать, есть ли у кого-то другой подход. Благодаря! – AndyDan