簡體   English   中英

在該查詢中,我使用哪種JOIN類型顯示NULL值?

[英]Which JOIN type do I use to display NULL values in this query?

我正在嘗試加入三個桌子。

第一個表是transactions ,其中包含學生獲得的“積分”的詳細信息。 此處的相關字段是Recipient_ID (學生接收點)。

第二個表是purchases ,其中包含學生購買的“獎勵”的詳細信息。 這里的相關字段是Student_IDReward_ID

最終表是rewards ,其中詳細說明了購買的獎勵。 這里的相關字段是Reward_IDCost_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表中的所有記錄,即使purchasesrewards表中沒有記錄也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM