程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> sql-新手對於SQL語句的一些疑問

sql-新手對於SQL語句的一些疑問

編輯:編程解疑
新手對於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

但是執行的時候老是提示
子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表達式時,這種情況是不允許的。
我思路上看不出來問題啊,但是這個問題折騰了好久,自學真心痛苦啊。請高人能按著我的思路解答下,應為有更容易的實現這個的方法,但是我還是想知道我自己的思路錯在那裡了,謝謝

最佳回答:


想用子查詢,應該先確定主表,你想查“姓名 英語 數學 語文 歷史”,主表肯定應該是人,也就是出的結果應該是一個人一行記錄,主題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),這個子查詢不需要,而且這個子查詢的結果是所有人的肯定是多條記錄

uwenhao2008
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved