数据库问题....高手来

来源:百度知道 编辑:UC知道 时间:2024/05/24 19:10:21
班导姓名在ut表中,班级姓名在ug表中,ug表中有些班级没班导用null表示的,显示指导两个班级以上的班导的姓名、所指导的班级名称???
select tname,gname
from uTeacher ut,uGrade ug
where ut.tid=ug.tid
group by tname,gname
having count(ug.tid)>'1'
按理说...这样是可以出结果的...可为什么出不来结果
不是这样的问题...我们作业全这样做了...去掉了也不行 ....哎...还是不行

count(ug.tid)得出来的结果是数字型
但是'1'是字符型,当然出不来结果了
你把1上的单引号去掉就好了

那就改成count(*)
count(ug.tid)这种如果有空值的话可能会有问题
----------重新写一个--------------

select ut.tname,ug.gname from uTeacher ut,uGrade ug,
(select tid from uGrade group by tid having count(*)>1) a,
where ut.tid=ug.tid
and ut.tid=a.tid
group by ut.tname,ug.gname

把你的having count(ug.tid)>'1' 改为:having count(tname)>'1' 试试。

具体参照下面:

当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:
执行where子句查找符合条件的数据;
使用group by 子句对数据进行分组;
对group by 子句形成的组运行聚集函数计算每一组的值;
最后用having 子句去掉不符合条件的组。
select dno,count(*)
from employee
group by dno
having count(*)>3
需要注意:having 子句中的每一个元素也必须出现在select列表中,oracle可能不用也可以。