推 hammert:感謝大家的幫忙 04/02 21:36
以下僅供參考, 若需驗證請自行測試. 若發現問題歡迎討論.
掌握兩個關鍵: ifnull 的用法, 以及 left join 的用法.
select A.id,B.Student,IFNULL(B.Score,0) as Score
from TableA as A
left join TableB as B on B.id=A.id
order by B.Student,A.id;
不過撇開SQL語法不談, 以下table的設計本身就有點怪怪的:
從需求結果來判斷, TableB的id欄位應該就是TableA的id的外鍵,
但在TableB當中這樣的命名很容易引起混淆, 應該改一下命名.
另外, 關於學生在TableB當中缺乏記錄的部份, 究竟是缺考? 還
是考零分? 或是記錄遺失? 或是根本沒記錄? 並沒有做一個可以
判斷的機制, 這也是個問題. 合理的話, 應該要像這樣:
Student id Score
A 002 null <- 代表缺考
B 003 0 <- 代表考零分
至少可以確定不是記錄遺失或是根本沒記錄.
※ 引述《hammert (^^)》之銘言:
: 若我有下列二個Table
: TableA
: --------------------
: id | Name
: --------------------
: 001 | SQL
: 002 | Enligh
: 003 | Chinese
: TableB
: ------------------------
: Student | id | Score
: ------------------------
: A | 001 | 80
: A | 003 | 90
: B | 001 | 100
: B | 002 | 60
: 而我要找出的資料如下:
: 001 A 80
: 002 A 0
: 003 A 90
: 001 B 100
: 002 B 60
: 003 B 0
: 那我要怎麼寫?
: 剛剛試著把二個Table join起來,但好像永遠只有四筆資料
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.186.206
※ 編輯: bobju 來自: 59.104.186.206 (04/02 17:45)