ここはとある街の総合病院。
ここには通常の診療科のほかに,
何軒もの病院をたらいまわしにされた,
それがSQL緊急救命室,
そう,
- ロバート
- 救命室部長。腕の立つエンジニアだが,
口が悪く性格はもっと悪い四十オヤジ。 - ヘレン
- 救命室副部長。若いながらもロバートに次ぐ実力を持つ才媛。救命室の良心。
- ワイリー
- インターンで救命室に配属された不運な学生。無給で治療から雑務全般にこき使われる。エンジニアとしては新人に毛が生えたレベル。
(AM3:00:仮眠室。ソファーでロバートが熟睡しているところへワイリーがやってくる)
……先生,
グーむにゃむにゃ。おうっ,
……先生!
グー。うひゃひゃもっと下。
先生ってば!
うるさい。耳元で怒鳴るな。
先生のほうがずっとうるさいし不気味ですよ
今何時だと思ってる。ほっとけ,
風邪じゃないんだから,
まったく,
(救命室。雑然とした器具が散乱しているなか,
遅いわよ。連絡を受けたら3分以内に来るのがルールでしょ。
3分で死ぬわけじゃあるまい。それで,
典型的なサブクエリ・
どれ…なるほど,
はい,
図2 リスト1の実行結果
cust_id | seq | price --------+-----+------- A | 1 | 500 B | 5 | 100 C | 10 | 600 D | 3 | 2000
リスト1 サブクエリ・
SELECT R1.cust_id, R1.seq, R1.price
FROMReceiptsR1 (※)
INNER JOIN
(SELECT cust_id, MIN(seq) AS min_seq
FROMReceipts ※
GROUP BY cust_id) R2
ON R1.cust_id = R2.cust_id
AND R1.seq = R2.min_seq;
※ 同一テーブルを結合する自己結合
さてワイリー,
ええっ,
そうね。この問題で難しいのは,
ヘレンの言うとおり,
- 注1)
- 同一のテーブルまたはビューに対する結合。うまく使うと便利ですが,
高コストな実行計画が選択されるリスクの高い結合方式でもあります。詳細な解説は参考資料3を参照。