sql 语句 查询结果赋值变量_记一次SQL语句查询

今天刷50道sql语句题,遇到了一个很有意思的问题,原题如下

8cc4e6818bf94b3e217993bc7faa278e.png

这是一道非常经典的4表查询问题(学生表s,课程表c,成绩表sc,老师表t),那按照我的思路,我想

1.用一条sql语句查询出叶平老师教的课程的数量

2.再用一条语句查询出学生学的叶平老师课程的数量

3。如果他们两个的数量是相等的,不就证明该学生学习了叶平老师的所有课了吗

然后我的查询语句如下:

select Sid,Sname from student where Sid in 
  (
  select Sid from sc,course c,teacher t where sc.Cid = c.Cid and t.Tid = c.Tid and t.Tname = "叶平" group by Sid having count(c.Cid)
=
  (select count(c.Cid) from teacher t,course c where t.Tname = "叶平" and  c.Tid = t.Tid)
)

按逻辑来说,其实是没问题的。官方给出的答案更简洁,但不太容易理解,如下:

SELECT  s.Sid,s.Sname
from student s
where not EXISTS
(
select c.Cid from course c where c.Tid =    
			(select t.Tid from teacher t where t.Tname ="叶平")
       and c.Cid not in 
			(select sc.Cid from sc where sc.Sid = s.Sid)
)

然后我执行各自的语句,结果官方的答案查询多出来一条数据。我对照了表内容,发现确实是官方的是正确的。但我觉得我的逻辑也没有错,一时陷入懵逼状态。我逐句分析了我的sql语句,并对照成绩表(sc)内的内容。发现了问题出在哪里。

原来成绩表里有一个学生,选的叶平老师的同一门课,但是却有两次成绩

77e00fbaeaf762d968434a906dae7caf.png

这就导致了我的语句在count(c.cid)的时候多出来一条数据,所以该学生就比老师教的课程多出来一门。导致了不相等。出现错误。

当然,如果按照实际情况,该学生一门课是可以有两次成绩的,比如学生挂科补考的成绩。

所以,官方的答案还是更准确的。

最后贴一下题目的链接吧。倾删!

数据库之 MySQL-- 50个查询系列​blog.csdn.net
b64ec6fb9bf9b027a26cc4dde187113d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值