3 つのテーブルを結合しようとしています。
最初のテーブルにはtransactions
、学生が獲得した「ポイント」の詳細が含まれています。ここで関連するフィールドはRecipient_ID
(学生がポイントを受け取る) です。
2 番目のテーブルにはpurchases
、学生が購入した「特典」の詳細が含まれています。ここで関連するフィールドはStudent_ID
とReward_ID
です。
最終的な表はrewards
、購入した報酬の詳細です。ここで関連するフィールドはReward_ID
、Cost_to_User
(学生が各報酬に対して支払う価格。現在、これはまったく使用していません) とTitle
です。
私がやろうとしているのは、学生 ID の特定のリストを提供して、学生のポイントと 3 つの最も高価な特典の購入のリストを表示することです。
これまでに書いたSQL文は次のとおりです。
SELECT
t.Recipient_ID AS `ID` ,
SUM( t.Points ) AS `Points Earned`,
SUBSTRING_INDEX( GROUP_CONCAT(DISTINCT r.Title SEPARATOR ', '),', ',3 ) as `Rewards`
FROM `transactions` t
JOIN `purchases` p ON t.Recipient_ID = p.Student_ID
JOIN `rewards` r ON p.Reward_ID = r.Reward_ID
WHERE T.`Recipient_ID`
IN ( 90128, 90163, 34403, 35501 )
GROUP BY t.`Recipient_ID`
これはある程度機能します - 2 人の学生が表示され、ポイントの合計と最新の報酬が表示されます。
しかし、ポイントの合計は大きく間違っており、購入していない学生は表示されていないと思います.
学生が購入していない場合でも、学生を表示したいと思います。
間違っているのは私の JOIN だと思いますがGROUP_CONCAT
、最も高価な報酬を 3 つ挙げるほど強力ではないと思います。JOIN を変更する必要がありますか、それとも何らかのサブクエリを使用する必要がありますか?
前もって感謝します、