我正在为我们公司的员工开发一个网络应用程序。根据他们所拥有的某些培训和他们阅读的程序,可以授权某个员工在某个项目中工作。
我有几张桌子:
我想选择一张只显示" Sicil"员工和" Proj_ID"他们可以工作的项目。这意味着他们至少参加了培训并阅读了项目的先决条件。如果他们做得更多,那就没关系。我想为整个数据库执行此操作,并找到每个员工的项目,他们已经自动化并且可以继续工作。
我在SQL查询中已经有了这么多,但它并不准确。我猜这与有这么多的连接操作有关:
SELECT DISTINCT emp.Sicil, proj.Proj_ID
FROM tbl_yet_Proje proj FULL OUTER JOIN tbl_yet_ProjeEgitim pe ON proj.Proj_ID = pe.Proj_ID
INNER JOIN tbl_yet_ProjeProsedur pp on proj.Proj_ID = pp.Proj_ID
INNER JOIN tbl_yet_EmployeeEgitim ee ON pe.TR_ID = ee.TR_ID
INNER JOIN tbl_yet_EmployeeProsedur ep ON ep.Pros_ID = pp.Pros_ID
INNER JOIN vw_Employee emp ON emp.Sicil = ep.Sicil AND emp.Sicil = ee.Sicil
任何人都可以帮我吗? 非常感谢你
答案 0 :(得分:0)
我会在员工和项目之间进行交叉联接,过滤那些没有员工完成的程序或培训的项目。如果我没有错,以下查询应该为您提供您愿意收集的结果:
select e.Sicil,
proj.Proj_ID
from tbl_yet_Proje proj,
vw_Employee e
where (
select count(*)
from tbl_yet_ProjeProsedur pp
left join tbl_yet_EmployeeProsedur ep on pp.Pros_ID = ep.Pros_ID
and ep.Sicil = e.Sicil
where pp.Proj_ID = proj.Proj_ID
and ep.Pros_ID is null
) = 0
and (
select count(*)
from tbl_yet_ProjeEgitim pt
left join tbl_yet_EmployeeEgitim et on pt.TR_ID = ep.TR_ID
and et.Sicil = e.Sicil
where pt.Proj_ID = proj.Proj_ID
and et.TR_ID is null
) = 0