select sno from STUDENT where SNO=(select SNO from SCORE where DEGREE between 70 and 90);
他的错误是这样的
消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
他的答案是这样的
SELECt SNO FROM SCORE GROUP BY SNO HAVINg MIN(DEGREE)>70 AND MAX(DEGREE)<90;
问题
1为什么我那样写不行啊
2为什么他那样写就行
谢谢
数据库里的一个嵌套查询问题
答案:2 悬赏:0 手机版
解决时间 2021-01-31 08:53
- 提问者网友:原来太熟悉了会陌生
- 2021-01-31 01:09
最佳答案
- 五星知识达人网友:怀裏藏嬌
- 2021-01-31 01:21
你的查询当然会有问题:用等于号的话,后面的值必须是一个标量(所谓标量就是只能有一个值,或者没有值)。而你的查询中SNO等于之后的子查询返回的明细是有多个记录,故会出错(如果无符合条件的记录,或者只有一个记录那么也是可以执行的)。
从你的查询来看,似乎只需要DEGREE在70和90之间的SNO记录,那么直接用子查询就好了:
select SNO from score where degree between 70 and 90;
如果想要sutdent的资料,那么内连接子查询:
select s.*
from student s
inner join (select distinct SNO from score where degree between 70 and 90) t on s.SNO = t.SNO;
从你的查询来看,似乎只需要DEGREE在70和90之间的SNO记录,那么直接用子查询就好了:
select SNO from score where degree between 70 and 90;
如果想要sutdent的资料,那么内连接子查询:
select s.*
from student s
inner join (select distinct SNO from score where degree between 70 and 90) t on s.SNO = t.SNO;
全部回答
- 1楼网友:你哪知我潦倒为你
- 2021-01-31 01:47
select c.companyname,a.userid,a.loginname,b.departmentid,a.password
from user a
left join department b
on a.departmentid = b.departmentid
left join company c
on b.companyid = c.companyid
where a.loginname like 'tony%'
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯