”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 MySQL 中检索每个类别的前 5 项,同时避免“子查询返回超过 1 行”错误?

如何在 MySQL 中检索每个类别的前 5 项,同时避免“子查询返回超过 1 行”错误?

发布于2024-11-20
浏览:316

How to Retrieve the Top 5 Items from Each Category in MySQL While Avoiding the

在 MySQL 中检索每个类别的前 5 项

尝试获取时遇到错误“子查询返回超过 1 行”每个菜单类别的前五个菜单项?解决方案在于使用副作用变量。

让我们分解一下修改后的方法:

在子查询中,我们使用 SQL 的 @ 表示法引入副作用变量 @r 和 @g。这些变量用于跟踪组成员身份并增加每个组内的排名。

  1. @g:=null - 将 @g 初始化为 NULL,表示我们正在开始一个新组。
  2. @r:=0 - 将 @r 初始化为 0,表示新排名的开始。
  3. 子查询中的 WHERE 子句(其中 m.menuid = s.menuid)确保 s 和 m根据菜单 ID 对齐。
  4. @r:=case when @g=m.profilename then @r 1 else 1 end - 如果 m.profilename 与当前相同,则此 case 表达式将 @r 递增 1组(@g)。否则,它将 @r 重置为 1,表示新组的开始。
  5. @g:=m.profilename - 使用当前组的配置文件名称更新 @g,允许我们跟踪属于该组的后续行group.
  6. 主查询从子查询表别名 X 中检索配置文件名称和名称。
  7. 最终的 WHERE r

通过实施这种方法,您可以高效地获得所需的结果,而不会出现“子查询返回超过 1 行”的错误。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3