我无法简洁地描述我需要什么,所以任何编辑标题的帮助都表示赞赏!
我有3张桌子:
Jobs
(有JobID
PK)JobsDetail
(有[{1}} FK和JobID
FK)DepartmentsID
(有Departments
PK) DepartmentsID
将有少量记录(~10)
如果我有10个部门行,我需要为每个Departments
记录重复所有10行。不在作业的Jobs
记录中的DepartmentID将在“作业”列中显示JobsDetail
值。使用一个NULL
记录,典型的Jobs
按我希望的方式工作:
LEFT JOIN
得出这些结果:
Select d.Department, jobs.JobIdentifier
From Departments d
LEFT JOIN (Select Distinct j.JobID, j.JobIdentifier, DepartmentID,
From Jobs j
Join JobsDetail jd on j.JobID = jd.JobID) jobs on d.DepartmentID = jobs.DepartmentID
当然,当添加另一个Jobs记录时,我会看到:
Department JobIdentifier
310 NULL
320 NULL
430 NULL
450 NULL
460 NULL
500 NULL
530 1000
533 1000
534 1000
535 NULL
我需要的是这样的事情:
Department JobIdentifier
310 2000
320 NULL
430 NULL
450 NULL
460 2000
500 NULL
530 1000
533 1000
534 1000
534 2000
535 NULL
如何实现这一目标?
以下是表格中的一些测试数据:
Department JobIdentifier
310 NULL
320 NULL
430 NULL
450 NULL
460 NULL
500 NULL
530 1000
533 1000
534 1000
535 NULL
310 2000
320 NULL
430 NULL
450 NULL
460 2000
500 NULL
530 NULL
533 NULL
534 2000
535 NULL
答案 0 :(得分:4)
您应该从作业和部门之间的交叉连接开始,然后从那里构建查询:
Select d.Department, jobs.JobIdentifier
From Departments d cross join
(select distinct JobIdentifier from Jobs j) ji LEFT JOIN
(Select Distinct j.JobID, j.JobIdentifier, DepartmentID,
From Jobs j Join
JobsDetail jd
on j.JobID = jd.JobID
) jobs
on d.DepartmentID = jobs.DepartmentID and
ji.jobidentifer = jobs.jobIDentifier
我对JobId和JobIdentifier之间的区别有点不清楚,所以这可能不太对。
如果将ji.JobIdentifier添加到select
列表,您将看到部门应属于哪个职位,即使没有匹配。
答案 1 :(得分:1)
您需要划掉目录(使用交叉连接),部门和工作,然后左键加入您的关系表
答案 2 :(得分:0)
这是怎么回事?
select d.Department, CASE WHEN d.DepartmentId = jj.DepartmentID THEN jj.JobID ELSE NULL END
from Department d, (SELECT j.JobID, jd.DepartmentID FROM Jobs j left outer join JobDetail jd on j.JobID = jd.JobID) as jj
答案 3 :(得分:0)
我不确定我是否理解你正在尝试做什么,所以让我们从头开始。以下陈述以何种方式证明不足?
Select
d.Department,
j.JobIdentifier
From
Departments d
Left Join JobDetails jd On d.Id = jd.DepartmentId
Left Join Jobs j On jd.JobId = j.Id