SQL select如果关系上的count大于X?

时间:2017-10-15 14:57:06

标签: mysql sql count

我有2张桌子

"的订单"与" 文章"

具有1对N的关系
SELECT `orders`.* FROM `orders` INNER JOIN `articles` ON 
`articles`.`orders_id` = `orders`.`id` where ????

如何对文章进行子计数并仅获得包含4篇或更多文章的订单?

谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

您可以这样做:

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

这甚至是SELECT *GROUP BY的合法使用,因为o.id(可能)是orders上的主键。

另一种方法是:

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

这样做的好处是它可以在articles(order_id)上使用索引,因此它可以有更好的性能。

答案 1 :(得分:2)

使用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