3

我对mysql之一不是很清楚。我有两张桌子:

tbl 类别
ID、名称

tblproduct
id、名称、数量、价格、Category_id

当我使用 sql 选择所有类别以按产品数量排序时:

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;

结果是某些没有产品的类别没有出现在我的结果中!我怎样才能得到所有这些?

4

1 回答 1

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 值而不是缺少的行。

于 2013-05-21T10:53:55.977 回答