中易网

sql 多对多 查询

答案:4  悬赏:20  
解决时间 2021-01-14 10:37
  • 提问者网友:情歌越听越心酸
  • 2021-01-13 12:12
sql 多对多 查询
最佳答案
  • 二级知识专家网友:未来江山和你
  • 2021-01-13 12:54
select x.stuid,x.stu_name from stu as x inner join (
select a.stuid,b.cou_time from t_stu_cou as a inner join cou as b on a.couid=b.couid
group by a.stuid,b.cou_time having COUNT(*)>1 ) as y on x.stuid=y.stuid
其中有些栏位是我自己假设的,你可以根据实际状况改为你自己的追问用你的方法试了试,怎么只能查询出第一条数据呢?,而且这条数据的学生只选了一门课,课程一周有一课时,加上sql语句长度过长了,一会单独在把sql发出来追答你语句中的goup by呢?
我这边执行结果是对的
全部回答
  • 1楼网友:平生事
  • 2021-01-13 15:37
你可以根据‘学生课程中间表’查看学生每个学生所选的课程,在课程表里应该有上课时间吧,那不就能看哪些同学上课时间有冲突了吗?
  • 2楼网友:时间的尘埃
  • 2021-01-13 14:17
select a.stuid from (select top 1 stuid from t_stu_cou where count(stuid)=2 order by createtime group by createtime ) a inner join (select top 1 stuid from t_stu_cou where count(stuid)=2 order by createtime desc group by createtime) on a.stuid=b.stuid where a.createtime <> b.createtime
  • 3楼网友:猎心人
  • 2021-01-13 14:00
如果出现这种情况,那么对于此学生在同一上课时间的课程数量一定大于1,因此,在oracle数据库中,可以使用如下语句:
select t_stu_cou.stu_id,stu.stu_name,cou.begin_date,count(1)
from t_stu_cou,cou,stu
where t_stu_cou.stu_id=stu.stu_id
and t_stu_cou.cou_id=cou.cou_id
group by t_stu_cou.stu_id,stu.stu_name,cou.begin_date
having count(1)>1
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息