我有2张桌子
“ orders ”与“ articles ”有1对N的关系
SELECT `orders`.* FROM `orders` INNER JOIN `articles` ON
`articles`.`orders_id` = `orders`.`id` where ????
Run Code Online (Sandbox Code Playgroud)
如何对文章进行子计数并仅获得包含 4 篇或更多文章的订单?
谢谢你的帮助!
您可以这样做:
SELECT o.*
FROM orders o INNER JOIN
articles a
ON a.orders_id = o.id
GROUP BY o.id
HAVING COUNT(*) >= 4;
Run Code Online (Sandbox Code Playgroud)
SELECT *
这甚至是with的合法使用GROUP BY
,因为o.id
(大概)是 上的主键orders
。
另一种方法是:
select o.*
from orders o
where (select count(*)
from articles a
where a.order_id = o.id
) >= 4;
Run Code Online (Sandbox Code Playgroud)
这样做的好处是可以使用 上的索引articles(order_id)
,因此可以有更好的性能。