我在一个mysql中不太清楚。 我有两张桌子:
tblcategory
id,name
tblproduct
id,Name,Qty,Price,Category_id
当我使用sql选择按产品数量排序的所有catogories时:
SELECT c.id,c.name,count(p.id) as product_count
FROM tblcategory as c inner join tblproduct as p on c.id=p.category_id
GROUP BY c.id,c.name
ORDER BY product_count;
结果是某些没有产品的类别没有出现在我的结果中!我怎么能得到所有这些?
答案 0 :(得分:6)
您需要使用left outer join
:
SELECT c.id,c.name,count(p.id) as product_count
FROM tblcategory as c left outer join tblproduct as p on c.id=p.category_id
GROUP BY c.id,c.name
ORDER BY product_count;
inner join
仅保留两个表中匹配的记录。即使没有匹配项,您也需要所有产品类别。 left outer join
保留第一个表(tblcategory
)中的所有记录以及第二个表(tblproduct
)中的任何匹配记录。如果某个类别中没有产品,那么您将获得值0而不是缺失的行。