MySQL - WHERE / HAVING计数

时间:2014-08-08 16:31:41

标签: php mysql

我搜索了很多关于此问题的相似主题,但无法找到这个特定探测器的答案。

所以我有一个包含类别的表格,我有另一个包含产品的表格,所以我想要的是选择包含至少1个产品的所有类别,看起来很简单,但下面的代码不能给我我所期望的。

SELECT *
FROM categories
INNER JOIN products on (categories.id = products.cat_id)
HAVING count(products.cat_id) > 0

感谢所有帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

您实际上只需加入即可获得所需内容,因为任何没有产品的类别都不匹配。

您还应添加DISTINCTGROUP BY以从结果中删除重复的类别记录:

SELECT DISTINCT c.* 
  FROM categories c
  JOIN products p
    ON c.id = p.cat_id 

OR:

  SELECT c.* 
    FROM categories c
    JOIN products p
      ON c.id = p.cat_id 
GROUP BY c.id

如果您想要拥有2种或更多产品的类别,那么您可以使用GROUP BYHAVING

  SELECT c.* 
    FROM categories c
    JOIN products p
      ON c.id = p.cat_id 
GROUP BY c.id
  HAVING count(*) >= 2 

答案 1 :(得分:0)

在此选择此选项中选择至少包含一个产品的所有类别

select categories.* from categories 
left join products on (categories.id = products.cat_id) 
where products.cat_id IS NOT NULL
group by categories.id

在这种情况下,您不会使用" HAVING"但会有相同的结果