gpt4 book ai didi

mysql - 我使用哪种 JOIN 类型来显示此查询中的 NULL 值?

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:08 24 4
gpt4 key购买 nike

我正在尝试连接三个表。

第一个表是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(参见 Visual Explanation of Joins):

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< 中没有记录 表。

关于mysql - 我使用哪种 JOIN 类型来显示此查询中的 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14221133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com