mysql - 按组限制而不省略重复项?
问题描述
我有这个有点复杂的查询(精简版):
SELECT a.item_id,
a.title,
a.series,
c.title AS manufacturer_title
FROM catalog_items AS a
JOIN catalog_franchises AS c ON a.manufacturer_id = c.franchise_id
JOIN catalog_franchises AS e ON a.game_id = e.franchise_id
WHERE e.franchise_id = 6
AND a.valid = TRUE
AND c.valid = TRUE
AND e.valid = TRUE
ORDER BY c.title, a.series, a.title
我试图关注的重要领域是c.title
和a.series
。因此,为简洁起见,此查询返回:
item_id series manufacturer_title
46 2 fantasy flight games
63 1 gaming heads
64 1 gaming heads
33 2 reaper miniatures
124 1 triforce
125 1 triforce
45 1 triforce
43 1 usaopoly
我正在尝试做的是添加LIMIT
基于这些字段的唯一组合......如果我添加:GROUP BY c.title, a.series
它给了我独特的组:
item_id series manufacturer_title
46 2 fantasy flight games
63 1 gaming heads
33 2 reaper miniatures
124 1 triforce
43 1 usaopoly
但我想要所有的行,受这些组的限制。因此,如果限制为 3,我希望前 3 组中的所有项目:
item_id series manufacturer_title
46 2 fantasy flight games
63 1 gaming heads
64 1 gaming heads
33 2 reaper miniatures
我希望这是有道理的。如何修改我的查询来实现这一点?
解决方案
您可以先在子查询中选择和限制组,然后将其连接回表以获得最终结果。
SELECT DISTINCT a2.series, c2.title
FROM catalog_items AS a2
JOIN catalog_franchises AS c2 ON a2.manufacturer_id = c2.franchise_id
JOIN catalog_franchises AS e2 ON a2.game_id = e2.franchise_id
WHERE e2.franchise_id = 6
AND a2.valid = TRUE
AND c2.valid = TRUE
AND e2.valid = TRUE
ORDER BY c2.title, a2.series
LIMIT 3
只需将其添加到原始查询的 WHERE 中:
AND (a.series, c.title) IN (query above)
注意:是的,确实会导致几乎复制了自身内部的原始查询;但这通常是这些类型的查询最终需要的方式。
推荐阅读
- swagger - Swagger 2.9.2 到 Swagger 3.0.0
- c# - VS Code 为 Unity 项目中的 C# 文件启用 Intellisense
- scala - 是否可以将视图实现隐藏在 Scala 应用程序中?
- javascript - 如何在 react-native 中订阅 firebase 特定主题?
- arrays - 搜索对象数组
- php - 无法访问组件中的请求对象。$this->request 在升级到 cakephp 4.0 后在组件中为空
- opengl - 修改 alpha 值时 Framebuffer 的 RGB 颜色不同
- php - 如何在不触及 HTML 元素的情况下修改 HTML 字符串?
- node.js - 生产环境中的 Sass-loader 问题
- masstransit - ConsumerDefinition 中的延迟队列