如何在MySQL中使用HAVING来限制列表



我试图通过在MySQL 5.7中使用HAVING将每个merchant_id的结果集限制为5。不幸的是,这似乎不起作用,我也不明白为什么。

我的SQL查询将三个表连接在一起,并标识制造商有列表的类别

SELECT
mcs.CAT_ID
FROM tbl1 mc
INNER JOIN tbl2 mcs ON mc.ID = mcs.CAT_ID
INNER JOIN tbl3 p ON mcs.ARTICLE_ID = p.SKU
WHERE
p.MANUFACTURER_ID =18670
group by 
mc.merchant_ID, mcs.CAT_ID
HAVING 
COUNT(mc.merchant_id) < 5

我在SO上读到,在不看where语句的情况下执行,但限制这个列表的正确方法是什么?

您没有提供表模式和伪数据,所以我不能确定确切的查询,但我会使用以下方法:

SELECT
mc.merchant_id, t.CAT_ID
FROM tbl1 mc
INNER JOIN (
SELECT mcs.CAT_ID
FROM tbl2 AS mcs
WHERE mc.ID = mcs.CAT_ID
AND EXISTS (
SELECT 'x'
FROM tbl3 AS p
WHERE p.SKU = mcs.ARTICLE_ID
AND p.MANUFACTURER_ID = 18670
)
LIMIT 5
) as t
;

通过联接中的子查询,我选择与该mc.ID相关的所有CAT_ID,这些CAT_ID具有所选产品的列表(18670(,限制为5行。通过这种方式,对每个merchant_id 应用5的限制

最新更新