MySQL中的LIMIT和GROUP BY与JOIN一起使用

4

有没有一种方法可以在一个查询中按照一个表的列进行分组,但按另一个表的列进行限制。类似于:

SELECT items.*, subitems.*
FROM items
LEFT OUTER JOIN subitems ON subitems.subitem_itemId = items.item_id
GROUP BY subitem.subitem_id
LIMIT 10

...但是LIMIT 10只应用于项目记录的数量,而不是实际行数。因此我可以得到10个项目,但是无限制的子项目,因此可能会有超过10个实际行(如果子级小于或等于父级,则不会)。

然后我可以在php中循环这些,并设置父/子关系。还有更好的方法吗?

1个回答

7
您需要使用子查询来完成此操作:
SELECT items.*,subitems.*
FROM (
    SELECT *
    FROM items
    LIMIT 10
) AS items
LEFT OUTER JOIN subitems ON subitems.subitem_itemId = items.item_id
GROUP BY subitem.subitem_id;

是的,旧版的MySQL不支持子查询——或者我们这些天视为理所当然的许多其他功能。我相信MySQL 5及更高版本支持子查询,但我不是很确定——自从3.23天以来,我就没有经常使用MySQL了。我也不知道在旧版MySQL或其他不支持子查询的数据库引擎中实现相同目标的替代方法,除了在客户端中执行两个查询。 - Jonathan Hall
我可以使用子查询。谢谢答案 :) - ricick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接