如何返回sql如下数据集?急需!!!

设有如下表,字段的含义分别为学生姓名、课程、成绩。其中课程只有三门:数学、语文、物理,姓名和课程是联合主键。表名:table1studentcoursemark张三数学8... 设有如下表,字段的含义分别为学生姓名、课程、成绩。其中课程只有三门:数学、语文、物理,姓名和课程是联合主键。
表名:table1
student course mark
张三 数学 80
张三 语文 85
张三 物理 88
李四 数学 90
......
要求用sql返回如下数据集:
姓名 数学 语文 物理
张三 80 85 88
李四 90 ... ...
展开
 我来答
百度网友66a8d48e5
2010-12-07 · TA获得超过7687个赞
知道大有可为答主
回答量:3002
采纳率:12%
帮助的人:3833万
展开全部
使用自链或是临时表就可以了!

二楼,这样的表怎么不符合3NF了?这样表的关系依赖是(student,course)->mark,为什么说他不符合第三范式?我看符合的很呢!

自连接正如一楼所写,但一楼的结果是否正确就不敢保证的。因为必须考虑的是某一个学生在某一科没有成绩的情况。比如李四没有语文的成绩,注意不是语文成绩是0或null,而是没有这条记录时,一楼的语句是否还能正确的得出李四的结果?

seelct a.student,a.mark,b.mark,c.mark from table1 a join table1 b on a.student = b.student,table1 b join table1 c on b.student = c.student where a.course = '语文' and b.course = '数学' and c.course ='物理'

中间三表连接条件,如果写了前两具,则不必再说第三个,因为那是多余的。

临时表只是一个中间过程,实际在SQL中,视图,表,语唏,存储过程没有区别的。

select a.student,a.mark,b.mark,c.mark from (select a.student,a.mark from table1 a where a.course='语文'),(select b.student,b.mark from table1 b where b.course='数学'),(select c.student,c.mark from table1 c where c.course='语文') where a.student=b.student and a.student = c.student
也不是不必写b.student = c.student的。
如果烦麻烦,将from后的三个select改写成临时表或是视图就可以了!

重审一下就是该表符合3NF,如果有些结果出不来的时间,连接条件变成全连接即可!

一楼代码的主要缺点可能就是会引起不一致性的。虽然变成全连接可以得到结果,但第一个人的顺序可能是“语文、数学、物理”,但到第二个就可能是“语文,物理,数学”不同的顺序,难易达到一定的顺序对应的!所以一楼代码正确,但没有实用性!
061007113
2010-12-07 · TA获得超过294个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:223万
展开全部
建的表就不符合三个范式 你这样建的表不仅冗余度大还造成你现在查询犯难 为什么建表的时候不建成:姓名、数学成绩、语文成绩、物理成绩
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-12-07
展开全部
select a.student,a.remark,b.remark,c.remark from table1 a,table1 b,table1 c
where a.student=b.student and b.student=c.student and a.course !=b.course and a.course !=c.course and b.course !=c.course ;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式