gpt4 book ai didi

mysql - SELECT 查找不存在的 id 的结果

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

在我的数据库中,我收集了 Steam 期间请求的歌曲。每首歌曲均由已知用户请求。我想实现每个用户都可以对请求的歌曲进行评分的功能。鉴于这种情况,您可以看看我的数据库模型:

Database model

现在我想选择一个由其 id 标识的特定 song_request 以及这首歌的平均评分以及这首歌被评分的频率。为此,我想使用以下 SQL:

SELECT 
sr.id,
sr.user_id,
sr.title,
sr.link,
sr.request_time,
COALESCE(AVG(r.rating), 0) AS rating,
COUNT(r.sr_id) AS votes
FROM song_requests sr LEFT OUTER JOIN sr_ratings r
ON sr.id = r.sr_id
WHERE sr.id = 12345;

在我的 song_requests 表中,我有以下数据:

song_request row

在 sr_ratings 表中有一些示例评级:

sr_ratings example

如果我用

执行SQL
sr.id = 1 

在 WHERE 子句中,我得到以下预期结果:

query_ok_result

如果我现在使用不存在的 song_request 的 id

sr.id = 12345

我会得到如下结果:

query_bad_result

我预计查询不会找到任何结果,因为该 ID 不存在。我哪里错了?我需要做什么才能获得预期的结果?

最佳答案

这里有多个问题。首先,您显然在使用 MySQL,因为代码在几乎任何其他数据库中都是伪造的。您有一个聚合函数,以及非聚合列并且没有 GROUP BY 子句。

我猜你想要这样的东西:

SELECT sr.id, sr.user_id, sr.title, sr.link, sr.request_time, 
COALESCE(AVG(r.rating), 0) AS rating,
COUNT(r.sr_id) AS votes
FROM song_requests sr LEFT OUTER JOIN
sr_ratings r
ON sr.id = r.sr_id
WHERE sr.id = 12345
GROUP BY sr.id, sr.user_id, sr.title, sr.link, sr.request_time;

瞧!您会发现这可以解决您的问题。这将不返回任何行。

您的代码返回一行,因为它是一个没有GROUP BY 的聚合查询。即使没有匹配项,它也总是只返回一行。事实证明,问题不在于 LEFT JOIN;这是 GROUP BY 的错误使用。

关于mysql - SELECT 查找不存在的 id 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43867574/

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