SQL select如果关系计数大于X?

问题描述:

我有2个表SQL select如果关系计数大于X?

订单”与“文章” 1对N的关系

SELECT `orders`.* FROM `orders` INNER JOIN `articles` ON 
`articles`.`orders_id` = `orders`.`id` where ???? 

我怎么能做出文章子计数并只获得与订单4篇或更多文章?

感谢您的帮助!在orders

SELECT o.* 
FROM orders o INNER JOIN 
    articles a 
    ON a.orders_id = o.id 
GROUP BY o.id 
HAVING COUNT(*) >= 4; 

这甚至与GROUP BY合法使用SELECT *,因为o.id是(大概)主键:

+0

你试过group by和having? – sia

+0

请提供您的表格数据和attr – Gagantous

你可以做到这一点的。

另一种方法是:

select o.* 
from orders o 
where (select count(*) 
     from articles a 
     where a.order_id = o.id 
    ) >= 4; 

这具有可articles(order_id)使用索引的优势,因此它可以有更好的表现。通过使用HAVING条款与聚合结果的过滤器

使用聚合

SELECT `o`.* 
FROM `orders` o 
INNER JOIN `articles` a 
ON `a`.`orders_id` = `o`.`id` 
GROUP BY o.id 
HAVING COUNT(DISTINCT a.id) >=4