在我正在处理的某些SQL中,对于连接语句有点麻烦。想知道是否有聪明的人在那里能够帮助我解决问题!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似乎不支持左外连接,右外连接或全连接。
任何人都可以帮忙吗?感谢您阅读本文。 :)
编辑: [tblPoint]包含字段(PointID,RaceTypeID,点,位置)。每种比赛类型有5行。点名是主键和表可能看起来像:
点ID - 1,RaceTypeID - 1,分 - 10,位置 - 1
点号 - 2,RaceTypeID - 1,点 - 6,位置 - 2
点号 - 3,RaceTypeID - 1,点 - 3,位置 - 3
点ID - 4,RaceTypeID - 1,点 - 2,位置 - 4
点ID - 5 RaceTypeID - 1,Points - 1,Position - 5.
这意味着对于第一种类型,第一名获得10分,第二名获得6分,依此类推。该表可以支持不同的种族类型,每种种族都有自己的点系统。
一个成员可以在tblResult中出现任何次数,一旦成员'注册'参与他们就会出现在tblResult中,没有完成位置或个人时间分配。
我认为最好的办法是发布一些样本数据。例如,成员在结果表中出现的频率如何?点表中只有5行? – Fionnuala 2012-04-23 15:03:33
访问支持'LEFT OUTER JOIN'和'RIGHT OUTER JOIN',但不是'FULL OUTER JOIN'(但请注意,'LEFT OUTER JOIN'和'RIGHT OUTER JOIN'的联合与'FULL OUTER JOIN'相同) 。 – onedaywhen 2012-04-23 15:15:47
刚刚编辑我原来的帖子,包括你建议的信息,有没有让它更清晰的机会? @onedaywhen。你认为这是我需要的全外汇吗?我在网上看到了关于如何重新创建一个完整的外部连接的文章。 – LNB 2012-04-23 15:31:47