2016-03-03 60 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。