比如商品分类表:type(id,name)有两条记录{(1  '服装'),(2  '手机')}
商品表:product(id,name,typeid)记录为{(1  '诺基亚6030'  2),(2  'n97'  2)}
用这个SQL语句查的话
select count(*),t.* from type t  left outer join product p on t.id = p.typeid group by t.id
count(*) id       name
1 1 服装
2 2 手机
可是服装这个类下是没有商品的,应当count数为0,但这里却是1 
不知道有哪位高手可以解决这个问题

解决方案 »

  1.   

    因为你是左联接,所以,表type会显示所有记录,加个过滤条件就可以了select count(*),t.* from type t  left outer join product p on t.id = p.typeid where p.typeid is not null group by t.id 或直接用内联接就可以了:
    select count(*),t.* from type t  inner join product p on t.id = p.typeid group by t.id 
      

  2.   


    select count(*),t.* from type t  left outer join product p on t.id = p.typeid group by t.id 
    count(*) id      name你这个是左外连接。就算商品表里不存在服装这个类的记录。二表左外连接时依然会有记录只是记录以
    type.id type.name product.id product.name product.typeid
     1        服装       null        null         null这样存在。所以你count(*)它时。当然等于1了。
    你可以先不count试下左外连接的结果就知道了。
      

  3.   

    select count(p.typeid),t.* from type t  left outer join product p on t.id = p.typeid group by t.id
      

  4.   

    select t.id,t.name,count(p.typeid)
    from product p right join type t
    on p.typeid=t.id
    group by t.id;
      

  5.   

    1,2楼没有完全解决我的问题.3,4楼的SQL完全可以用所以分数高一点,谢谢大家