SQL的(集合的)考え方と、ループ(手続き型)の考え方3
言い換える
『在庫数が必要量を満みたす製品のみ』 → 『在庫数が必要量を満たさないレコードがある製品を削る』
『満たさない』= NOT EXISTS(あるいは、NOT IN)
答えは
SELECT * -- 本当は必要なもののみ
FROM
部品表 AS bh INNER JOIN 在庫 AS zk
ON bh.材料名 = zk.材料名
WHERE
NOT EXISTS (SELECT *
FROM 部品表 AS bh_s INNER JOIN 在庫 AS zk_s
ON bh_s.材料名 = zk_s.材料名
WHERE bh_s.製品名 = bh.製品名 -- サブクエリ側と外側を繋ぐ
AND zk_s.数量 < bh_s.必要量);
ベースはこれだけの話なので、マスターなどが増えても同じです。
生産管理系のシステムでは、このような処理がほとんどになりますが、手続き型で考えたらそれなりの時間が掛かるものでも、ほとんど何十秒で分かるようになります。このぐらいから、こちらにある問題
http://d.hatena.ne.jp/Sikushima/20100616/1276680064
のレベル程度のものが『イメージ』できるようになれば、実際にコーディングに多少の時間が掛かったとしても、一瞬で答えまでは行けるわけです。
イメージが出来ていれば仕様書は書きようがありません。
SQLでやるなら生産管理ぐらいのシステムなら、ER図、テーブル定義、項目移相表があれば、仕様書は要らないのです。