学习MySQL过程中遇到的关于连接的问题,请老师指点!!!

weixin_42096229 2018-06-10 10:37:24
有一张表,如下
要生成每科目成绩最高者的信息

为什么这个查询是错误的
而(SELECT score FROM student y WHERE x.name = y.name )没有错误?
还有score >= ALL (SELECT score FROM student y WHERE x.name = y.name )是怎么比较的?
子查询(SELECT score FROM student y WHERE x.name = y.name )先生成一个临时表:,然后score是怎么和临时表进行比较的?是score的每一行要和临时表的所有值进行比较一下吗?
...全文
856 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SRCS000 2018-06-15
  • 打赏
  • 举报
回复
引用 8 楼 shinger126 的回复:
[quote=引用 7 楼 SRCS000 的回复:] ROW_NUMBER() OVER(PARTITION BY COURSE ORDER BY score desc ) as row 然后再取ROW=1的
MYSQL没有ROW_NUMBER[/quote] 思维在着难道不能思考变通以下吗?http://blog.51cto.com/mrcelite/745913
shinger126 2018-06-13
  • 打赏
  • 举报
回复
引用 7 楼 SRCS000 的回复:
ROW_NUMBER() OVER(PARTITION BY COURSE ORDER BY score desc ) as row 然后再取ROW=1的
MYSQL没有ROW_NUMBER
SRCS000 2018-06-13
  • 打赏
  • 举报
回复
ROW_NUMBER() OVER(PARTITION BY COURSE ORDER BY score desc ) as row 然后再取ROW=1的
卖水果的net 2018-06-10
  • 打赏
  • 举报
回复
这个提示,是告诉你,你要取的列名是 score ,但是这两张表都有这列,你要明确一下,要取哪张表上的这个列。 比如,可以写成 select x.score 或 selec y.score 或 两个都要。 select x.score, y.score
jenny6666 2018-06-10
  • 打赏
  • 举报
回复
score >= ALL (SELECT score FROM student y WHERE x.name = y.name )中>=ALL是大于等于子查询中的所有值得意思,执行查询时先处理子查询,找出学生的所有成绩,就是你的临时表,再处理父查询,找所有score>=子查询的结果。
jenny6666 2018-06-10
  • 打赏
  • 举报
回复
这个内容是关于子查询的,你可以看看书上的例子。
卖水果的net 2018-06-10
  • 打赏
  • 举报
回复
你出错的这个,没有子查询。 这是一个关联查询。 再说子查询 select * from t where d in ( select d from t) -- 或者 where d >= any (select d from t ) 这个 select d from t ,也是只是返加一列, d 这个返回列,如果没有写前辍,那么就是 表t 的; 再举例 select * from t where d in (select d from t a, t b) 这个子查询中,要返回 d 这列,但是 a 和 b 都有 d 列,就必须指定定是哪个表的。
weixin_42096229 2018-06-10
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:


这个提示,是告诉你,你要取的列名是 score ,但是这两张表都有这列,你要明确一下,要取哪张表上的这个列。

比如,可以写成
select x.score

selec y.score
或 两个都要。
select x.score, y.score
子查询中可以不用指明输出哪个表中的score列吗?那个子查询的输出是对的吗?在执行外层查询时,只能相同科目下的成绩进行比较吗?如只能和同是语文科目的成金进行比较。如果是这样,临时表中只有score一列啊,没有name课course列???这点很困惑,想不明白,求指点!!!
weixin_42096229 2018-06-10
  • 打赏
  • 举报
回复
引用 1 楼 jenny6666 的回复:
score >= ALL (SELECT score FROM student y WHERE x.name = y.name )中>=ALL是大于等于子查询中的所有值得意思,执行查询时先处理子查询,找出学生的所有成绩,就是你的临时表,再处理父查询,找所有score>=子查询的结果。
那个子查询的结果是对的吗?在执行父查询时,是相同科目下的成绩进行比较吗?如就只能和同是语文科目下的成绩比较。如果是这样,子查询的表中只有一列啊,并没有name和course列?这点很困惑。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧