oder by 后面能不能接select查询的啊

cmzx3444 2009-11-30 04:11:01
oder by 后面能不能接select查询的啊
我现在有这样一个需求
两张表,学生表:user 成绩表:score
一个user有多个学期的score,但可能有学学生这个学期没有成绩
现在我要查出所有学生,并按照所选的那个学期的学习成绩排序

现在的问题就是必须查出所有学生,包括没成绩的学生,
如果就差有成绩的直接在成绩表里差就可以了,
所以我查出所有的学生,在order按照那个学期的成绩排序一下,
但是好像不行,高手指点指点啊
...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2009-11-30
  • 打赏
  • 举报
回复
实现相同的功能,可以直接用下面的 left join 来实现。

select u.*
from user u left join (select uid,score from score where 学期=所选的那个学期) b
on u.uid=b.uid
order by b.score
懒得去死 2009-11-30
  • 打赏
  • 举报
回复
首先考虑的是效率,效率!
cmzx3444 2009-11-30
  • 打赏
  • 举报
回复
我再试试
cmzx3444 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vinsonshen 的回复:]
left join 就可以了:

SQL codeselect t1.*,ifnull(t2.成绩,0)as new_valuesfrom `user` t1leftjoin score t2on t1.学生ID=t2.学生IDwhere 学期字段='学期值'orderby new_valuesdesc
[/Quote]
这样只能查出有成绩学学生啊
cmzx3444 2009-11-30
  • 打赏
  • 举报
回复
返回的好像是多行啊,那怎么办啊
vinsonshen 2009-11-30
  • 打赏
  • 举报
回复
left join 就可以了:

select t1.*,ifnull(t2.成绩,0) as new_values from `user` t1 left join score t2 on t1.学生ID=t2.学生ID
where 学期字段='学期值'
order by new_values desc
懒得去死 2009-11-30
  • 打赏
  • 举报
回复
可以接。 不过ORDER BY 是行级的。除非你的SELECT返回的只有一行。
wwwwb 2009-11-30
  • 打赏
  • 举报
回复
贴记录及要求结果出来看看

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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