我搜索了很多关于此问题的相似主题,但无法找到这个特定探测器的答案。
所以我有一个包含类别的表格,我有另一个包含产品的表格,所以我想要的是选择包含至少1个产品的所有类别,看起来很简单,但下面的代码不能给我我所期望的。
SELECT *
FROM categories
INNER JOIN products on (categories.id = products.cat_id)
HAVING count(products.cat_id) > 0
感谢所有帮助。
谢谢!
答案 0 :(得分:2)
您实际上只需加入即可获得所需内容,因为任何没有产品的类别都不匹配。
您还应添加DISTINCT
或GROUP 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 BY
和HAVING
:
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"但会有相同的结果