免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1649 | 回复: 4
打印 上一主题 下一主题

求教一个关于SQL查询的难题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-11 10:43 |只看该作者 |倒序浏览
为了便于大家理解,我虚构了这么一个场景,因此大家不要问这个情况合理不合理。
比如有一张学生表 student (studentID,name,class),以及一张成绩表score(studentID,name,score,subject)。
此时学生表里插入了一个新的学生纪录。(5,王五,5班),成绩表里应该没有相应的王五的记录。

学生表
studentID, name, class
1,张三,1班,
2,小华,5班,
3,李四,5班,
4,王五,5班

成绩表
studentID, name,score, subject
1,张三,75,英语,
2,小华,60,英语,
2,小华,65,语文,
3,李四,80,语文,
3,李四,95,英语


但我想要得到这样的一个结果,把所有5班的学生的英语成绩列出来,包括没有成绩的,但名单上应该有这个人。也就是这样
studentID, name, class,score, subject
2,小华,5班,60,英语,
3,李四,5班,95,英语,
4,王五,5班,null,null

论坛徽章:
0
2 [报告]
发表于 2006-04-11 10:48 |只看该作者
不知道要如何构建这个SQL语句呢,用inner join,或者left join 似乎都不能解决,起初我是这样写的
select * from student
left join score
on score.studentID=student.studentID
where subject="英语" and class="5班"
但这样的结果,王五的纪录被忽略了。

论坛徽章:
0
3 [报告]
发表于 2006-04-11 10:51 |只看该作者
我想到要先把 select * from score where subject="英语" 这些纪录先形成一个临时表,
再和student 用left join 连接应该能得到我想要的结果,但是好象很麻烦。
不知道碰到这种情况,应该如何处理呢,不一定非要用一个SQL语句。
大家觉得成熟高效的处理方式是怎么样的。
谢谢

论坛徽章:
0
4 [报告]
发表于 2006-04-11 11:15 |只看该作者
where (subject="英语" or subject is null) and ...

论坛徽章:
0
5 [报告]
发表于 2006-04-11 16:10 |只看该作者
啊啊,失败,居然这么简单就给解决了,高人啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP