我有2张桌子
"的订单"与" 文章"
具有1对N的关系SELECT `orders`.* FROM `orders` INNER JOIN `articles` ON
`articles`.`orders_id` = `orders`.`id` where ????
如何对文章进行子计数并仅获得包含4篇或更多文章的订单?
谢谢你的帮助!
答案 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