uwenhao2008 2016-12-30 02:21 采纳率: 16.7%
浏览 965
已采纳

新手对于SQL语句的一些疑问

请教高手解答

CREATE TABLE member(
    MID CHAR(10) PRIMARY KEY,  --学号
    MNAME CHAR(50)  NOT NULL           --姓名
 )
 CREATE TABLE F(
    FID CHAR(10) PRIMARY KEY,   --课程
    FName CHAR(50)  NOT NULL            --课程名
 )
 CREATE TABLE Score(
    SID INT PRIMARY KEY IDENTITY(1,1), --成绩记录号 
    FID CHAR(10) FOREIGN KEY(FID) REFERENCES F(FID),           --课程号
    MID CHAR(10) FOREIGN KEY(MID) REFERENCES member(MID),           --学生号
    Score INT   NOT NULL                       --成绩
 )

这是我建立的表的脚本,我要实现下面的查询
姓名 英语 数学 语文 历史
我下面这条SQL语句的意思就是 先选出来姓名,然后分别select4列,通过F001
,F002这些用来区分课程,sMID=mMID

  SELECT 姓名=(SELECT m1.MName from member AS m1),
    英语=(select Score from Score as s where s.FID='F001'AND s.MID=m.MID)
    --数学=(select Score from Score AS s where s.FID='F002')
    --语文=(select Score from Score AS s where s.FID='F003' WHERE member.MID=s.SID),
    --历史=(select Score from Score AS s where s.FID='F004' WHERE member.MID=s.SID)   
 FROM Score AS s,member AS m,F AS f

但是执行的时候老是提示
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
我思路上看不出来问题啊,但是这个问题折腾了好久,自学真心痛苦啊。请高人能按着我的思路解答下,应为有更容易的实现这个的方法,但是我还是想知道我自己的思路错在那里了,谢谢

  • 写回答

5条回答 默认 最新

  • qw12fd 2016-12-30 03:18
    关注

    想用子查询,应该先确定主表,你想查“姓名 英语 数学 语文 历史”,主表肯定应该是人,也就是出的结果应该是一个人一行记录,主题sql就是
    select name from member;然后成绩采用子查询:(select Score from Score as s where s.FID='F001'AND s.MID=m.MID);综合起来就是
    select name,(select Score from Score as s where s.FID='F001'AND s.MID=m.MID) from member;
    你写的sql问题就在于:1、主sql from 应该只有member表,2、姓名=(SELECT m1.MName from member AS m1),这个子查询不需要,而且这个子查询的结果是所有人的肯定是多条记录

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记