![](/img/trans.png)
[英]SQL query not returning unique results. Which type of join do I need to use?
[英]Which JOIN type do I use to display NULL values in this query?
我正在嘗試加入三個桌子。
第一個表是transactions
,其中包含學生獲得的“積分”的詳細信息。 此處的相關字段是Recipient_ID
(學生接收點)。
第二個表是purchases
,其中包含學生購買的“獎勵”的詳細信息。 這里的相關字段是Student_ID
和Reward_ID
。
最終表是rewards
,其中詳細說明了購買的獎勵。 這里的相關字段是Reward_ID
, Cost_to_User
(學生為每種獎勵支付的價格;我目前根本沒有使用此價格)和Title
。
我想要做的是,提供特定的學生ID列表,以顯示學生的積分列表和三個最昂貴的獎勵購買。
到目前為止,我編寫的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`
這在一定程度上有效-顯示了兩名學生,以及他們的總分和最新獎勵。
但是,他們的積分總數非常錯誤,我相信學生們如果沒有購買任何物品,就不會顯示出來。
如果他們沒有購物,我仍然想向他們展示。
我懷疑這是我的JOIN錯誤,但我也懷疑GROUP_CONCAT
的功能不足以列出三個最昂貴的獎勵。 我需要更改我的JOIN,還是需要使用某種子查詢?
提前致謝,
我認為您應該看一下使用LEFT JOIN
(請參閱Join的視覺說明 ):
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
LEFT JOIN `purchases` p
ON t.Recipient_ID = p.Student_ID
LEFT JOIN `rewards` r
ON p.Reward_ID = r.Reward_ID
WHERE T.`Recipient_ID`
IN ( 90128, 90163, 34403, 35501 )
GROUP BY t.`Recipient_ID`
LEFT JOIN
將返回transactions
表中的所有記錄,即使purchases
或rewards
表中沒有記錄也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.