2014-01-17 193 views
0

此查询多次显示每条记录,我的意思是超过25次,为什么?查询多次显示每条记录

SELECT   
    dbo.HrEmployee.EmplID, dbo.HrEmployee.EmplName, dbo.AtdRecord.RecDate, 
    dbo.AtdRecord.RecTime, dbo.HrDept.DeptName 
FROM    
    dbo.HrDept 
RIGHT OUTER JOIN 
    dbo.HrEmployee ON dbo.HrDept.DeptID = dbo.HrEmployee.DeptID 
LEFT OUTER JOIN 
    dbo.AtdRecord ON dbo.HrEmployee.EmplID = dbo.AtdRecord.EmplID 

我尝试不同的,但没有奏效

我试图张贴分贝结构

​​

+1

请张贴分贝结构。 – Amit

+0

这对于回答你的问题要么是发布数据库结构,要么提供样本数据和预期数据 –

+0

check db struct plz – James

回答

1

按照您的理解试试这个

SELECT   
    dbo.HrEmployee.EmplID, dbo.HrEmployee.EmplName, dbo.AtdRecord.RecDate, 
    dbo.AtdRecord.RecTime, dbo.HrDept.DeptName 
FROM    
    dbo.AtdRecord 
INNER JOIN 
    dbo.HrEmployee ON dbo.HrEmployee.EmplID = dbo.AtdRecord.EmplID 
INNER JOIN 
    dbo.HrDept ON dbo.HrDept.DeptID = dbo.HrEmployee.DeptID 
+0

谢谢:)它的完成 – James

+0

欢迎詹姆斯:) – Amit

1

一个加入对行数返回取决于基数的影响您要加入的两个表之间的关系以及与您的加入条件相匹配的记录数。如果您看到行数增加,则表示您已加入1:M或M:M关系。在这里回答你的问题需要知道的是HrDept,HrEmployee和AtdRecord之间的关系。

我猜想HrEmployee:AtdRecord是1:M。

+0

HrEmployee:AtdRecord = 1:M和HrDept:HrEmployee = 1:M和 – James

+0

对此有何看法? – James

+0

举个简单的例子,假设你有3名员工,每个员工5个AtdRecords。当您加入此1:M关系时,即使您从员工中选择,现在也可以获得15条记录。同样,您在这里从HrDept加入HrEmployee(1:M),然后从HrEmployee加入AtdRecord(1:M)。随着您通过选择1:M关系有效地乘以返回的行,您的结果集将随着每个连接而扩展。 – Carth