表結構:member(學生)、F(課程)、Score(成績)。需輸出:姓名、英語、數學、語文、歷史——每位學生一行。
原 SQL 從 Score, member, F 多表連接作主查詢,子查詢 SELECT m1.MName FROM member AS m1 返回多行,導致「子查詢返回值不止一個」錯誤。
SELECT
m.MName AS 姓名,
(SELECT Score FROM Score WHERE FID='F001' AND MID=m.MID) AS 英語,
(SELECT Score FROM Score WHERE FID='F002' AND MID=m.MID) AS 數學,
(SELECT Score FROM Score WHERE FID='F003' AND MID=m.MID) AS 語文,
(SELECT Score FROM Score WHERE FID='F004' AND MID=m.MID) AS 歷史
FROM member m;
FROM member,保證每位學生一行。m.MID。NULL,不影響主行。這是標準的「行轉列」寫法,清晰且效能可接受(課程數固定少時)。