老师您好,我想请教一下老师这道题

老师您好,我想请教一下老师这道题

我只能判断选了高等数学的学生,判断不了没有选高等数学的学生,下面是我写的代码,比如:04学号的学生同时选了英语,政治,高数;我下面的代码不显示高数那一行,但依旧会显示04学生,老师您好,我该怎么写才能完完全全把没有选修高等数学的学生信息输出?

https://img1.sycdn.imooc.com//climg/628dfeca094e342c00000000.jpg

https://img1.sycdn.imooc.com//climg/628dff6a09e9adc402650358.jpg

https://img1.sycdn.imooc.com//climg/628dff930925273010940867.jpg

https://img1.sycdn.imooc.com//climg/628dffa30932c7c602550879.jpg

https://img1.sycdn.imooc.com//climg/628dffb4093882b602680539.jpg


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
时间, 2022-05-25 19:28:42

同学,你好!同学可以参考下述sql语句:

先根据sno分组,将每个学生的cno和cname值放到一个新的字段中,使用not FIND_IN_SET() 查找newcno字段中不包含a02的数据,再和student表做关联

1
2
3
4
5
6
7
8
select from student as s2
join
(select s.sno,GROUP_CONCAT(DISTINCT c.cno) as newcno,GROUP_CONCAT(DISTINCT c.cname) as newcname  from course as c
join sc as s
on c.cno=s.cno
group by s.sno 
having not FIND_IN_SET('a02',newcno)) s3
on s2.sno = s3.sno

表中只用了部分数据

https://img1.sycdn.imooc.com//climg/628e12db09660df309030667.jpg

运行结果:

https://img1.sycdn.imooc.com//climg/628e12e8090bc4b311540141.jpg

祝学习愉快!

  • 提问者 TheCreamPuff #1

    老师您好,我用了您的代码试试,发现结果好像有点不符

    https://img1.sycdn.imooc.com//climg/628e2da109d5032b13850651.jpg

    那三个数据表我不知道怎么发给你,这里上传不了....

    2022-05-25 21:23:51
  • 提问者 TheCreamPuff #2

    老师您好我解决了,原来是'a02 ' 后面还有个空格的...

    2022-05-25 23:43:04
  • 时间, 回复 提问者 TheCreamPuff #3
    同学,你好!解决了就好!祝学习愉快!
    下载视频          
    2022-05-26 09:31:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码