我有这两个表:ritter(ritterId, ritterName)和quest(questID, ritterID, datum)。
现在我的问题是,如何使用额外的列显示 ritter 中的所有内容,该列显示当前周 ritter 的任务数?
我试过这个:
select r.*, count(q.ritterID) from ritter as r left join quest as q on r.ritterID = q.ritterID group by r.ritterID;
Run Code Online (Sandbox Code Playgroud)
这有效,但没有本周的原因。
如果我做: select r.*, count(q.ritterID) from ritter as r left join quest as q on r.ritterID = q.ritterID where weekofyear(datum) = weekofyear(now()) group by r.ritterID;
然后它只显示在本周执行任务的 ritter,但我想它显示所有 ritter。
输出:
情况如何:
应该如何:
表里特:
和桌子任务:
我该如何解决这个问题?
我希望你能理解我的意思和我想要的。对不起我的英语不好。
您距离解决方案并不遥远,只需将日期过滤器从 where 条件移至连接条件即可。这样,它仅适用于连接右侧的表,而不适用于整个结果集:
select r.*, count(q.ritterID)
from ritter as r left join quest as q
on r.ritterID = q.ritterID and weekofyear(datum) = weekofyear(now())
group by r.ritterID
Run Code Online (Sandbox Code Playgroud)
由于 ritter name 在功能上依赖于 ritter id,因此您的查询在最新版本的 MySQL 上将没问题。only_full_group_by然而,在旧版本中,如果设置了 sql 模式,您可能会遇到麻烦。因此,最好将 r.ritterName 添加到 group by 子句中。