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