我正在处理的一些 SQL 中的连接语句有点麻烦。想知道是否有任何聪明的人可以帮助我解决我的问题!
我正在尝试加入 3 个表:tblMember、tblResult 和 tblPoint
tblMember - 包含用户信息,例如姓名和电子邮件。tblResult - 包含成员和他们报名参加的比赛的详细信息,只要他们完成比赛的完成位置和时间的详细信息。 tblPoint - 包含与一个人在比赛中完成的位置相关的一组积分,例如第一名得 10 分,第二名得 8 分……如果一个人完成第 6 名或以下,则不得分。
我希望查询返回 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、Points、Position)。每种比赛类型有 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,第 1 名获得 10 分,第 2 名获得 6 分,依此类推。该表可以支持不同的比赛类型,每种比赛类型都有自己的积分系统。
成员可以在 tblResult 中出现任意次数,一旦成员“注册”参与,他们就会出现在 tblResult 中,没有分配完成位置或个人时间。