私が取り組んでいるいくつかの SQL の結合ステートメントに少し問題があります。私の問題を解決してくれる賢い人がいるのだろうかと思いました!
tblMember、tblResult、および tblPoint の 3 つのテーブルを結合しようとしています。
tblMember - 名前や電子メールなどのユーザー情報が含まれています。tblResult - メンバーの詳細と、メンバーがサインアップしたレースの詳細を含みます。ただし、フィニッシュ ポジションとレースを完了した時間の詳細も含まれます。 1位は10点、2位は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;
しかし、これはうまくいきません。私のクエリが結果を返すと、すでにポジションが割り当てられている人 (たとえば 2 位) が複数回返され、1 位のポイントが最初に割り当てられ、次に 2 位のポイントが 2 回目に割り当てられます!
これは JOIN の問題に違いありません...しかし、それを修正する方法がわかりません! 私はすでに IIF と ISNULL を使用してみましたが、使用するのが正しいとは思いません。
LEFT OUTER JOIN、RIGHT OUTER JOIN、または FULL JOIN をサポートしていないように見える MS Access を使用しています。
誰でも助けることができますか?これを読んでくれてありがとう。:)
編集: [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 に表示され、最終順位や個人的な時間が割り当てられることはありません。