从多个来源加入表格

时间:2014-04-12 00:41:12

标签: sql oracle join

我正在尝试创建一个查询(我稍后会转变为视图)来执行一些培训报告。基本上,您作为员工可以从多个来源分配培训,在这种情况下直接或作为您工作的一部分。所以你可能有这样的东西

select c.id, c.name, c.cost 
from course c 
join job_assignment ja on ja.course_id = c.id
join employee emp on emp.job_id = ja.id
where emp.name = 'Bob'

select c.id, c.name, c.cost
from course c
join personal_assignment pa on pa.course_id = c.id
join employee emp on emp.job_id = pa.id
where emp.name = 'Bob'

我真正想要的是像

select c.id, c.name, c.cost 
from course c
join magic_personal_and_job_assginment_combiner magic 
    on magic.course_id = c.id
join employee emp on emp.id = magic.employee_id
where emp.name = 'Bob'

但我不知道如何建立逻辑联系。我可以在两个查询中完成,但我不知道如何将它们组合成一个。

我使用的是Oracle,但我认为答案的根源是普通的Jane SQL。

2 个答案:

答案 0 :(得分:2)

您可以使用连接两个现有查询的联合(您说工作),只需添加一列来区分源,就像这样(如果我理解您的问题):

select c.id, c.name, c.cost, 'job assign' as assign_source
  from course c
  join job_assignment ja
    on ja.course_id = c.id
  join employee emp
    on emp.job_id = ja.id
 where emp.name = 'Bob'
union all
select c.id, c.name, c.cost, 'pers assign' as assign_source
  from course c
  join personal_assignment pa
    on pa.course_id = c.id
  join employee emp
    on emp.job_id = pa.id
 where emp.name = 'Bob'

答案 1 :(得分:1)

试试这个SQL:

SELECT c.id, c.name, c.cost 
FROM course c,  job_assignment ja, employee emp,personal_assignment pa 
WHERE emp.name = 'Bob' AND ( (ja.course_id = c.id AND emp.job_id = ja.id ) OR (pa.course_id = c.id AND emp.job_id = pa.id))