もう一度問題
問題)部品在庫から、作成可能な製品名をとる。
※本来はマスタテーブルと組み合わすべきですが、ツールの関係上2テーブルしか同時に表示出来ないので名称で結合する形になります。
答えは
SELECT 製品名
FROM
部品表 INNER JOIN 在庫
ON 部品表.材料名 = 在庫.材料名
GROUP BY 製品名
HAVING MIN(在庫.数量 - 部品表.必要量) >= 0;
三枚の図になっていますが、考え方さえ理解していれば数十秒で答えまでたどり着けます。パターン認識じゃないので忘れてもどってことはないのです。
考え方としてはこんな感じになります。
必要なテーブルを引っ付け、ゴールを目指して削り出して行けば良い。
プラモデルと、彫刻の違いです。
言い換えは、他の言語より重要?
プログラムも翻訳と同じですから、言い換えは必要です。
上の図の「SQL的思考3」でも、言い換えが必要なのですが、それほど難しい言い換えをしているわけではありません。
冷静に見て、「部品在庫から、作成可能な製品名をとる」を、「ソートして、製品名がブレイクしたとき……」と意訳することと比べたら、SQLの方がはるかに直訳に近いでしょう。
逆に、直訳でできるのに、「ソートして、製品名がブレイクしたとき……」なんて仕様書を作られても、ゴミでしかないのです。