在我正在處理的某些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