SQL连接没有给出正确的sql输出

时间:2014-02-16 11:41:36

标签: sql left-join

我有以下表结构

  

Department deptID deptName

     

DepartmentTask deptIDtaskCode taskName

     

DepartmentTaskInMajorTask deptIDtaskCode T1T2,... Tn

我需要以下列作为输出

deptName, taskName, T1, T2, …Tn

我尝试了一些连接但是我得到了多个值,不知道我是怎么做到的。例如,deptID = ‘xyz’有10个任务,因此表DepartmentTaskInMajorTask有10行。因此,输出shold只返回10行。但是当我尝试时,它给了我超过10个!

以下是我尝试过的SQL:

SELECT Department.deptName, 
       MajorTask_DeptTaskRelation.T1, 
       MajorTask_DeptTaskRelation.T2, 
       DepartmentalTask.taskName
FROM DepartmentalTask 
LEFT OUTER JOIN Department ON DepartmentalTask.deptID = Department.deptID 
RIGHT OUTER JOIN MajorTask_DeptTaskRelation ON Department.deptID = MajorTask_DeptTaskRelation.deptID

DepartmentalTask有131条记录,MajorTask_DeptTaskRelation也是如此。因此,输出还应该为我提供包含deptNametaskName的131条记录。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,我认为您可以尝试使用INNER JOIN查询来检索其他表中包含相关记录的记录,如下所示

SELECT a.deptName, b.taskName, c.T1, c.T2, … c.Tn 
FROM Department a
INNER JOIN DepartmentTask b
ON a.deptID = b.deptID
INNER JOIN DepartmentTaskInMajorTask c
ON b.taskCode = c.taskCode

请查看有关sql join here

的可视化说明的有用帖子

答案 1 :(得分:-1)

我最好的猜测是,你的问题中缺乏细节是与其他表的简单连接:

select deptName, taskName, T1, T2, ...Tn
from DepartmentTaskInMajorTask dtimt
join DepartmentTask dt on dt.deptID = dtimt.deptID
  and dt.taskCode = dtimt.taskCode
join Department d on d.deptID = dtimt.deptID