select a.userid,a.username,b.depname,count(c.emailuserid) from users a,departments b,email c where a.userdepid=b.depid=c.mailuserid

解决方案 »

  1.   

    同意楼上的:
    select a.userid,a.username,b.depname,count(c.emailuserid) from users a,departments b,email c where a.userdepid=b.depid=c.mailuserid
      

  2.   

    当然不行,不过也差不多了,只是少了个
    group by mailuserid
    另,当字段名没有重复的时候,加不加别名都可以!
      

  3.   

    select * from user a,departments b,(select emailuserid,count(emailuserid) from email group by emailuserid)as c where a.userdepid=b.depid and a.userdepid=c.emailuserid
      

  4.   

    对了,有的数据库要求group by 所有已经选择的字段
    这时应该是
    group by userid,usernamed,epname
    因为有的数据库不允许group by没有选择的字段你用的是哪一种数据库呢?
      

  5.   

    还没有解决呀?
    根据我的理解,depart对user是1对n,user对email也是1对n
    所以答案应该是
    select users.userid ,users.username ,departments.depname ,
    count(email.emailuserid) from users,departments,email
    where userid=emailuserid and userdepid=depid
    group by userid,username,depname
      

  6.   

    其实在存储设备容量巨大的今天,许多老的数据库设计范式已经被淘汰了
    数据库中适当的冗余是可以很大提高效率的
    将departname加到user表中,可以将你的查询速度提高至少count倍
    count=select count(*) from department
    因为多表联立查询的计算次数是笛卡儿级数,应尽量将联立表数保持在2
    增加适当的数据冗余是有必要的