一条多对多关系表的Sql查询语句
例如一个学生选课表student_course中含有字段学生id:StudentID,课程id:CourseID;现在要查询选课人数大于30的课程及选课学生,我的写法如下...
例如一个学生选课表student_course中含有字段学生id:StudentID,课程id:CourseID;
现在要查询选课人数大于30的课程及选课学生,我的写法如下:
select StudentID, CourseID
from student_course
where CourseID in
(
select CourseID
from student_course
group by CourseID
having COUNT(CourseID)>30
)
有简便写法没? 展开
现在要查询选课人数大于30的课程及选课学生,我的写法如下:
select StudentID, CourseID
from student_course
where CourseID in
(
select CourseID
from student_course
group by CourseID
having COUNT(CourseID)>30
)
有简便写法没? 展开
1个回答
展开全部
--楼主这样写就挺好塌橘的了 可以有几种写法
--我败游这样写比你那样的性能要好点团枯团
select StudentID, CourseID
from student_course a where exists(select 1 from student_course b where a.CourseID=b.CourseID and a.StudentID=b.StudentID
group by CourseID
having COUNT(1)>30)
--我败游这样写比你那样的性能要好点团枯团
select StudentID, CourseID
from student_course a where exists(select 1 from student_course b where a.CourseID=b.CourseID and a.StudentID=b.StudentID
group by CourseID
having COUNT(1)>30)
追问
有将两端语句 合并起来的方法吗?
追答
--不行 必须有一个嵌套 因为你有一个聚合函数 然后又查询另外的字段
--你是08吗? 如果是 还有一种写法 这个写法就像按照CourseID排序了 只要bz有
--30 就代表超过30个 这样也得嵌套
select StudentID, CourseID,ROW_NUMBER() over(partition by CourseID order by StudentID) bz
from student_course
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询