同意楼上的: select a.userid,a.username,b.depname,count(c.emailuserid) from users a,departments b,email c where a.userdepid=b.depid=c.mailuserid
当然不行,不过也差不多了,只是少了个 group by mailuserid 另,当字段名没有重复的时候,加不加别名都可以!
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
对了,有的数据库要求group by 所有已经选择的字段 这时应该是 group by userid,usernamed,epname 因为有的数据库不允许group by没有选择的字段你用的是哪一种数据库呢?
还没有解决呀? 根据我的理解,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
其实在存储设备容量巨大的今天,许多老的数据库设计范式已经被淘汰了 数据库中适当的冗余是可以很大提高效率的 将departname加到user表中,可以将你的查询速度提高至少count倍 count=select count(*) from department 因为多表联立查询的计算次数是笛卡儿级数,应尽量将联立表数保持在2 增加适当的数据冗余是有必要的
select a.userid,a.username,b.depname,count(c.emailuserid) from users a,departments b,email c where a.userdepid=b.depid=c.mailuserid
group by mailuserid
另,当字段名没有重复的时候,加不加别名都可以!
这时应该是
group by userid,usernamed,epname
因为有的数据库不允许group by没有选择的字段你用的是哪一种数据库呢?
根据我的理解,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
数据库中适当的冗余是可以很大提高效率的
将departname加到user表中,可以将你的查询速度提高至少count倍
count=select count(*) from department
因为多表联立查询的计算次数是笛卡儿级数,应尽量将联立表数保持在2
增加适当的数据冗余是有必要的