繁体   English   中英

MS Access中的SQL JOIN问题

[英]SQL JOIN Issue in MS Access

我正在使用的某些SQL中的join语句有点麻烦。 想知道是否有聪明人可以帮助我解决我的问题!

我正在尝试加入3个表:tblMember,tblResult和tblPoint

tblMember-包含用户信息,例如姓名和电子邮件。 tblResult-包含成员和他们所报名参加的比赛的详细信息,只要其完成比赛的位置和完成时间的详细信息即可。tblPoint-包含与某个人在比赛中的完成位置有关的一组积分第一名获得10分,第二名获得8分。如果一个人获得第六名或以下,则没有得分。

我希望查询返回tblResult.ResultID,tblMember.MemberName,tblResult.PersonalTime,tblResult.FinishPosition,tblPoint.Points。 但是,即使FinishPosition为空并且没有分配点,我也希望它返回所有这些字段。

我通过使用下面的SQL几乎解决了这个问题:

SELECT DISTINCT tblResult.ResultID, tblMember.MemberName, tblResult.PersonalTime, 
tblResult.FinishPosition, tblPoint.Points
FROM (tblMember INNER JOIN tblResult ON tblMember.MemberID = tblResult.MemberID) LEFT   
JOIN tblPoint ON tblResult.FinishPosition = tblPoint.Position;

但是,这不太有效。 当我的查询返回结果时,已经分配了某个职位(例如第二名)的人会多次返回,第一次分配第一名的分数,然后第二次分配第二名的分数!

这必须是一个JOIN问题...但是我看不到如何纠正它! 我已经尝试过使用IIF和ISNULL,但是我认为这不是正确的选择。

我正在使用MS Access,它似乎不支持LEFT OUTER JOIN,RIGHT OUTER JOIN或FULL JOIN。

有人可以帮忙吗? 感谢您阅读本文。 :)

编辑:[tblPoint]包含字段(PointID,RaceTypeID,点,位置)。 每种种族类型都有5行。 PointID是主键,该表如下所示:

点ID-1,RaceTypeID-1,点-10,位置-1

点ID-2,RaceTypeID-1,点-6,位置-2

点ID-3,RaceTypeID-1,点-3,位置-3

点ID-4,RaceTypeID-1,点-2,位置-4

点ID-5,RaceTypeID-1,点-1,位置-5。

这意味着对于种族1,第一个获得10分,第二个获得6分,依此类推。 该表可以支持不同的种族类型,每种种族类型都有其自己的积分系统。

成员可以在tblResult中出现任意次数,一旦成员“注册”参加,他们便会出现在tblResult中,而没有指定结束位置或个人时间。

对于其他有相同问题的人:

正如REMOU所指出的,我错过了另一个tblRaceType联接,谢谢! 这是我最后的SQL代码。

SELECT tblResult.ResultID, tblMember.MemberName, tblResult.PersonalTime, 
tblResult.FinishPosition, tblPoint.Points
FROM tblRaceType RIGHT JOIN ((tblMember INNER JOIN tblResult ON tblMember.MemberID = 
tblResult.MemberID) LEFT JOIN tblPoint ON tblResult.FinishPosition = tblPoint.Position) ON 
tblRaceType.RaceTypeID = tblPoint.RaceTypeID;

MS Access在混合JOINLEFT JOIN总是遇到问题。 将查询分为两个子查询。 这是MS Access的最佳策略,无论如何您都不会调整性能。

而且,如果这样做没有帮助,请尝试在图形界面中创建查询,因为MS Access在理解SQL源时可能会遇到问题...记住,它是MS :-)只需单击即可。 就像MS期望的那样-像一个简单的用户一样

尝试这些事情-即“尽可能简单地”使用Access,根据我的经验,您会发现问题所在。 同样,通过子查询策略(使用简单步骤构建查询),您也可以测试子结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM