2016-03-03 62 views
0

我有這個查詢返回沒有記錄,因爲它無法匹配指定的grp.EffectiveDate,而它們是在查詢內的內部聯接。數據庫是SQL Server。SQL SELECT語句日期時間內部聯接的故障

SELECT grp.GroupID, grp.GroupNumber, grp.Name, grp.Location, grp.GroupTypeID, grp.DivisionID, 
grp.MasterGroupID, grp.EffectiveDate, grp.TerminationDate, crt.[ContractNumber], pln.[PBPNumber], div.SiteName, src.Name as SourceName 
FROM [Group] grp 
    INNER JOIN [IndividualPlanDemographic] idp ON grp.GroupID = idp.IndividualPlanDemographicID 
    INNER JOIN [Plan] pln ON idp.PlanID = pln.PlanID 
    INNER JOIN [Contract] crt ON pln.ContractID = crt.ContractID 
    INNER JOIN [Division] div ON grp.DivisionID = div.DivisionID 
    INNER JOIN [SourceSystem] src ON div.SourceSystemID = src.SourceSystemID 
WHERE 1 = 1 
AND grp.EffectiveDate = '1/1/2015 12:00:00 AM' AND grp.GroupTypeID = '2' ORDER BY ContractNumber 

但是,如果我只是查詢的主要「組」表,它將返回正確的記錄我在尋找基於所有的標準。

SELECT grp.GroupID, grp.GroupNumber, grp.Name, grp.Location, grp.GroupTypeID, grp.DivisionID, 
grp.MasterGroupID, grp.EffectiveDate, grp.TerminationDate 
FROM [Group] grp 
WHERE 1 = 1 
AND grp.EffectiveDate = '1/1/2015 12:00:00 AM' AND grp.GroupTypeID = '2' 

爲什麼我的查詢在使用多個表時不工作?我專門引用列(grp.EffectiveDate)之前的表別名,所以我不明白還有什麼是錯的。與往常一樣,提前感謝您的幫助。

+0

它是什麼樣的數據庫? – kometen

+0

表結構,展示您的問題的預期產出(最小)樣本數據。這些是我最喜歡的一些東西。 http://stackoverflow.com/help/how-to-ask –

+0

@kometen SQL Server。 – krousemw

回答

1

也許你的INNER JOIN的一個應該是LEFT OUTER JOIN。在使用連接時,如果要使用/不使用子記錄返回父記錄,並且您的模式允許(可爲空FK),則應該離開外連接。

SELECT grp.GroupID, grp.GroupNumber, grp.Name, grp.Location, grp.GroupTypeID, grp.DivisionID, 
grp.MasterGroupID, grp.EffectiveDate, grp.TerminationDate, crt.[ContractNumber], pln.[PBPNumber], div.SiteName, src.Name as SourceName 
FROM [Group] grp 
    INNER JOIN [IndividualPlanDemographic] idp ON grp.GroupID = idp.IndividualPlanDemographicID 
    INNER JOIN [Plan] pln ON idp.PlanID = pln.PlanID 
    INNER JOIN [Contract] crt ON pln.ContractID = crt.ContractID 
    --THE GROUP IS NOT REQUIRED TO BE IN A DIVISION RELATIONSHIP 
    LEFT OUTER JOIN [Division] div ON grp.DivisionID = div.DivisionID 
    LEFT OUTER JOIN [SourceSystem] src ON div.SourceSystemID = src.SourceSystemID 
WHERE 1 = 1 
AND grp.EffectiveDate = '1/1/2015 12:00:00 AM' AND grp.GroupTypeID = '2' ORDER BY ContractNumber 
1

最終,這意味着匹配這個日期和組類型,該行不包含所有你是INNER加入到表中的記錄。

您的數據庫缺少預期記錄,或者您需要將其中一些INNER JOIN更改爲LEFT OUTER JOIN。