我有这个有点复杂的查询(精简版):
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(上面的查询)
注意:是的,确实会导致在其自身内几乎复制原始查询;但这通常是这些类型的查询最终需要的方式。
关于mysql - 按 GROUP 限制而不省略重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50257135/