带有输入参数的Oracle联接



好的实践是用参数创建联接吗?

on:par_emp=e.employees_id

例如。

select a.abc_id, a.year, a.month, :par_emp as emp, 
e.name_surname as employees,   
case when a.emp_1 = :par_emp then hours_1 end hours_1,
case when a.emp_2 = :par_emp then hours_2 end hours_2,
case when a.emp_3 = :par_emp then hours_3 end hours_3,
case when a.emp_4 = :par_emp then hours_4 end hours_4,
case when a.emp_5 = :par_emp then hours_5 end hours_5
From abc a
left outer join employee e  on :par_emp = e.employees_id
where :par_emp in (a.emp_1, a.emp_2, a.emp_3, a.emp_4, a.emp_5)
order by a.abc_id;

是的,你可以,没有什么问题。我唯一建议你应该发表评论,因为随着时间的推移,你可能会忘记这是为了什么。

Pd:;左外连接";以及";左联接";

必须外部联接employee表,这看起来很奇怪。有了适当的外键约束,abc行就不可能有emp_1、emp_2等不存在于employee表中。

我希望你选择员工并加入他们的abc行:

select
a.abc_id, a.year, a.month, e.employees_id, e.name_surname as employee_name,   
case when a.emp_1 = e.employees_id then hours_1 end hours_1,
case when a.emp_2 = e.employees_id then hours_2 end hours_2,
case when a.emp_3 = e.employees_id then hours_3 end hours_3,
case when a.emp_4 = e.employees_id then hours_4 end hours_4,
case when a.emp_5 = e.employees_id then hours_5 end hours_5
from employee e  
join abc a on e.employees_id in (a.emp_1, a.emp_2, a.emp_3, a.emp_4, a.emp_5)
where e.employees_id = :par_emp
order by a.abc_id;

(数据模型会简单得多,如果abc表中每个员工只有一行,而不是五名员工。但很难保证abc总是最多或正好有五名员工,当然。(

我并不反对它,但在您的示例中,您有效地实现了交叉联接,因此您可能只应该使用交叉联接。

最新更新