where id = 2当然取不出来了,你可以在输出的时候判断

解决方案 »

  1.   

    那肯定取不出来。id=2 的记录没有name是 b的
      

  2.   


    select x.name, y.c
    from (select distinct name from table ) x, 
     left join ( select name, count(*) as c from table where id = 2 group by name ) y 
      on x.name=y.name
      

  3.   

    公布答案SELECT a.name, count( DISTINCT (
    concat( b.id, b.name ) ) 
    )
    FROM test AS a
    LEFT JOIN test AS b ON a.id = b.id
    AND a.name = b.name
    AND b.id =2
    GROUP BY a.name其实还有一个唯一字段v
    所以上面还可以简化为SELECT a.name, count( b.v ) 
    FROM test AS a
    LEFT JOIN test AS b ON a.v = b.v
    AND b.id =2
    GROUP BY a.name