a表
aid  aname
1     yxy.com
2     itokit.com
3     hgxo.com.cnb表
bid aid bname
1    1  www
2    1  bbs
3    2  www
4    2  bbs
5    2  agent
6    3  bbs
7    3  www
8    3  hi
9    3  blog问:我想用一条SQL语句来查询a,b表,我想排序a表中的记录,是以b表中记录数出现的总数来排列。例如:a表中的“3     hgxo.com.cn”在b表中出现次数最多,所以会排第一位。而“2     itokit.com”在b表中出现次于3,所以会排列在3以后。所以最后记录应该按这样排列:
3     hgxo.com.cn
2     itokit.com
1     yxy.com可以实现吗?

解决方案 »

  1.   

    SELECT A.AID,A.NAME FROM A 
    LEFT JOIN B ON A.AID=B.AID
    GROUP BY A.AID,A.NAME
    ORDER BY COUNT(B.ID)
      

  2.   

    在AID上建立索引(A、B两表)试试,这是内连接,速度应该最快
      

  3.   


    呵。谢谢。这二个表上都建了索引的。应该是我远程操作的原因吧。呵。谢谢。我对内、外、左、右联接不是很懂。懂,今天学到了。谢谢!不过有个疑问哦!我a表:842条记录,b表:5779条记录,我用LEFT JOIN:SELECT A.AID,A.NAME FROM A
    LEFT JOIN B ON A.AID=B.AID
    查询出来的的却是:4548条记录,我用RIGHT JOIN:SELECT A.AID,A.NAME FROM A
    RIGHTJOIN B ON A.AID=B.AID
    查询出来的的却是:5779条记录,  这个我懂了。是以右表记录来取。但是为什么我用LEFT JOIN时却有4548条记录了,不是LEFT JOIN是以取出左表的记录吗?我的a表却只有842条记录啊?为啥啊?呵。谢谢!我用INNER JOIN:取出的记录为4201条。这是按什么来取的呢?
      

  4.   

    A表是一对B表中的多条记录.应该就是一对多关系 了。我刚刚想了想,是不是LEFT JOIN查询出来的是按左表来显示。只是左表中有多条一对多关系。所以就会增加了很多查询出来?刚刚看了下你写的那SQL语句。为什么加了GROUP BY和ORDER BY 就只有842条呢?而不会有4548条记录呢?这好像没有过滤功能吧?呵。
      

  5.   

    一对多关系记录会增加
    GROUP BY将同类的合并为一条记录