■ 一度も注文がなかった得意先を抽出する (2000, 2002, 2003,2007)
得意先テーブルと受注テーブルから今までに1度も注文がなかった得意先を抽出するクエリを作成します。今までに注文がなかったかどうか調べるには、受注テーブルの得意先IDを検索します。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkに新規データベースW075.mdbを作成します。
2. テーブルをインポート
メニューバーから[ファイル]→[外部データの取り込み]→[インポート]を選択します。「インポート」のダイアログが表示されたら、075.mdb(このページ最後からダウンロードすることができます)を選択して[インポート]ボタンをクリックします。
「オブジェクトのインポート」が表示されたら、[テーブル]タブから[tbl得意先]と[tbl受注]をクリックして選択します。[OK]ボタンをクリックしてインポートを開始します。インポートが完了すると、データベースウィンドウにインポートしたテーブルが表示されます。
3. 新規クエリ作成
データベースウィンドウのオブジェクトから[クエリ]をクリックして選択したら、新規オブジェクトのショートカットから[デザインビューでクエリを作成する]をダブルクリックします。「テーブルの表示」ダイアログが表示されたら、何も選択しないで[閉じる]ボタンをクリックしてダイアログを閉じます。
クエリのデザインビューが表示されたら、ツールバーからSQLビューのアイコン
をクリックします。SQLビューが表示されたら、次のSQLステートメントを入力します。
SELECT tbl得意先.得意先ID, tbl得意先.得意先名
FROM tbl得意先
WHERE NOT EXISTS
(SELECT 得意先ID FROM tbl受注 WHERE tbl受注.得意先ID=tbl得意先.得意先ID);
ツールバーから上書き保存のアイコン
をクリックしたら「qry注文のなかった得意先を抽出」の名称で保存します。

図 新規クエリを作成したら「qry注文のなかった得意先を抽出」の名称で保存
4. サブクエリ実行
ツールバーから実行のアイコン
をクリックして、サブクエリを実行します。データシートに今まで1度も注文がなかった得意先が1件表示されます。

図 今まで1度も注文がなかった得意先を表示する
●解説
得意先テーブルの得意先が今までに注文がなかったか調べるには、受注テーブルの得意先IDを検索します。WHERE句で受注テーブルと得意先テーブルを結合するには、次のようなSELECTステートメントを作成します。
SELECT 得意先ID FROM tbl受注, tbl得意先 WHERE tbl受注.得意先ID=tbl得意先.得意先ID
SELECTステートメントをネストさせるときは、FROM句から得意先テーブルを削除して、次のように書き換えます。
SELECT 得意先ID FROM tbl受注 WHERE tbl受注.得意先ID=tbl得意先.得意先ID
これで、親のSELECTステートメントで抽出した得意先IDが受注テーブルに存在するか調べることができます。後は、NOT EXISTSとサブクエリを組み合わせてWHERE句を追加すると、今までに1度も注文がなかった得意先を抽出することができます。
完成したサブクエリ:
SELECT tbl得意先.得意先ID, tbl得意先.得意先名
FROM tbl得意先
WHERE NOT EXISTS
(SELECT
得意先ID FROM tbl受注 WHERE tbl受注.得意先ID=tbl得意先.得意先ID);
Tip
|
LEFT
JOINで今までに1度も注文がなかった得意先を抽出する 得意先テーブルから今までに1度も注文がなかった得意先を抽出するには、サブクエリを使用する代わりにLEFT JOINを使用する方法もあります。この場合、次のようなSELECTステートメントを作成します。 SELECT tbl得意先.得意先ID, tbl得意先.得意先名 FROM tbl得意先 LEFT JOIN tbl受注 ON tbl得意先.得意先ID = tbl受注.得意先ID WHERE (((tbl受注.得意先ID) Is Null)); |