2014-01-17 69 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