列から行への更新
今度は先ほどの逆パターンを考えます。つまり、
ScoreCols:列持ち
| student_ | score_ | score_ | score_ |
|---|---|---|---|
| A001 | 100 | 58 | 90 |
| B002 | 77 | 60 | |
| C003 | 52 | 49 | |
| D004 | 10 | 70 | 100 |
![]()
| student_ | subject | score |
|---|---|---|
| A001 | 英語 | |
| A001 | 国語 | |
| A001 | 数学 | |
| B002 | 英語 | |
| B002 | 国語 | |
| C001 | 英語 | |
| C003 | 国語 | |
| C003 | 社会 |
| student_ | subject | score |
|---|---|---|
| A001 | 英語 | 100 |
| A001 | 国語 | 58 |
| A001 | 数学 | 98 |
| B002 | 英語 | 77 |
| B002 | 国語 | 60 |
| C001 | 英語 | 52 |
| C003 | 国語 | 49 |
| C003 | 社会 |
「C003」
今度は、
UPDATE ScoreRows
SET score = (SELECT CASE ScoreRows.subject
WHEN '英語' THEN score_en
WHEN '国語' THEN score_nl
WHEN '数学' THEN score_mt
ELSE NULL
END
FROM ScoreCols
WHERE student_id = ScoreRows.student_id);
演習問題
さて、
問題1. いまScoreRowsテーブルのscoreはNULLを許可していますが、
問題2. リスト8では、
