ここはとある街の総合病院。
ここには通常の診療科のほかに,
何軒もの病院をたらいまわしにされた,
それがSQL緊急救命室,
そう,
- ロバート
- 救命室部長。腕の立つエンジニアだが,
口が悪く性格はもっと悪い四十オヤジ。 - ヘレン
- 救命室副部長。若いながらもロバートに次ぐ実力を持つ才媛。救命室の良心。
- ワイリー
- インターンで救命室に配属された不運な学生。無給で治療から雑務全般にこき使われる。エンジニアとしては新人に毛が生えたレベル。
Keep It Simple, Stupid
(シンプルにしておけ, この馬鹿)
―KISSの原則
(AM11:00 休憩室。ワイリーとヘレンが話している)
どんな人間よ,
縁起でもないこと言わないでください。僕は禿げません。絶対に。毎日ちゃんとケアしてますから。
いやー,
(ロバートが休憩室のドアを開けて首を出す)
おい,
ああ,
ウフフ。
なんだ……? 気味の悪い連中だな。人の顔じろじろ見て。
いえ,
SQLで解く方法
これがカルテです。
カルテ1:図1のような2つのテーブルOrders
今,
レベルの異なる情報を結合する方法
1つの注文に複数の商品が含まれる可能性があるから,
基本的な考え方はそれでいいわ。結合すれば,
あとは,
リスト2 ワイリーの解:WHERE句に間違いあり
SELECT O.order_id,
O.order_name,
ORC.delivery_date - O.order_date AS diff_days
FROM Orders O
INNER JOIN OrderReceipts ORC
ON O.order_id = ORC.order_id
WHERE diff_days >= 3; ― エラーの原因
列"diff_days" は存在しません。行 7: WHERE diff_
days >= 3;(注1)
……。
おっかしいなあ。このDBMSバグってませんか?
思い通りにいかないと道具のせいにするのは素人の常だが,
- 注1)
- このエラーメッセージはPostgreSQLのものですが,
ほかのDBMSでもこのSELECT文は同様のエラーになります。