請教高手解答
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),這個子查詢不需要,而且這個子查詢的結果是所有人的肯定是多條記錄