mysql里有两个表,member(id,memberName)和record(id,memberId)memberId就是member表里id
我的目的是选出 member表里的全部memberName,然后按record表里的记录数来排序,我写了下面这个语句,但我发现一个很大的漏洞就是如果这个memberName在record表里无记录的话,那也就不能取出了,有没有别的什么办法写这样一个sql,把member里的所有记录都取出来,当然要按record里的记录多少,由高到低的排序select a.memberName,count(*) from member a,record b
where a.id = b.memberId
group by a.memberName
order by count(*) desc 

解决方案 »

  1.   

    select a.memberName,count(*) from member a
    left join record b 
    on a.id = b.memberId 
    group by a.memberName 
    order by count(*) desc
      

  2.   

    防止memberName重复的情况,应该这样写:
    select a.id,a.memberName,count(b.id) as total_count
    from member a 
    left join record b 
    on a.id = b.memberId 
    group by a.id
    order by total_count desc 
      

  3.   

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'record b on a.id = b.memberId group by a.id order by total' at line 2按你这个说话 我有错误提示
      

  4.   

    select a.id,a.memberName,count(b.id) as total_count
    from member a 
    left join record b 
    on a.id = b.memberId 
    group by a.id,a.memberName
    order by total_count desc 
      

  5.   

    group by a.id,a.memberName 这个是我故意忽略掉的,这种写法在mysql里面是支持的,我的测试没问题啊,如下:mysql> create table member(id int ,memberName varchar(20));
    Query OK, 0 rows affected (0.05 sec)mysql> create table record(id int,memberId int);
    Query OK, 0 rows affected (0.06 sec)mysql> select a.id,a.memberName,count(b.id) as total_count
        -> from member a
        -> left join record b
        -> on a.id = b.memberId
        -> group by a.id
        -> order by total_count desc;
    Empty set (0.01 sec)mysql>从你上面提示的错误看, 应该是你拷贝时换行符那里出错了
      

  6.   

    升序排列:
    select a.memberName,count(b.id) from member a
    left join record b
    on a.id = b.memberId
    group by a.memberName
    order by count(b.id) asc