Access 複数のフィールドからクエリで抽出
お世話になっております。
Accessのクエリについてお聞きしたいのですが、
テーブルに
mas_id---mas_nm---mas_nm2
1----ABC------DEF
2----GHI------JKL
としたとき、フォームのテキストボックスに1、2列のどれかをあいまい検索したときに
結果(ID)が取り出せるようにしたいです。
例:
「ABC」と入力→「1」
「DE」と入力→「1」
「GH」と入力→「2」
結果的にテキストボックスから3つのリストボックスを経て
大分類から細かい分類へ選択していくフォームを作ろうと思います。
テキストボックス(txtMaster)からキーワード1を入力(例:a1)
↓
リストボックス1(lstSub)に「11、12、13」が表示される。
どれか1つを入力する(例:11)
↓
リストボックス2(lstDet)に「111、112、113」が表示される。
どれか1つを入力する(例:111)
↓
リストボックス3(lstsai)に「1111、1112、1113」が表示される。
リスト1(値集合ソースに記述)
SELECT sub.sub_nm, sub.mas_id, sub.sub_id, master.mas_nm, master.mas_nm_2 FROM master INNER JOIN sub ON master.mas_id=sub.mas_id WHERE (((master.mas_nm) Like "*" & forms!フォーム!lblMaster.Caption & "*")) Or (((master.mas_nm_2) Like "*" & Forms!フォーム!lblMaster2.Caption & "*")) ORDER BY sub.sub_nm;
リスト2
SELECT detail.det_nm, detail.mas_id, detail.sub_id, detail.det_id, master.mas_nm, master.mas_nm_2 FROM master INNER JOIN (sub INNER JOIN detail ON (sub.sub_id = detail.sub_id) AND (sub.mas_id = detail.mas_id)) ON master.mas_id = sub.mas_id WHERE (((detail.sub_id)=[Forms]![フォーム]![lstSub]) AND ((master.mas_nm) Like "*" & [Forms]![フォーム]![lblMaster].[Caption] & "*")) OR (((master.mas_nm_2) Like "*" & [Forms]![フォーム]![lblMaster2].[Caption] & "*")) ORDER BY detail.det_nm;
リスト3も、リスト1・2同様にmas_nmとmas_nm2をORで記載していますが
フォームを使用したとき正確に結果が表示されるのはリスト1のみで、リスト2・3は全てのフィールドが表示されてしまいます。
またテーブルは4つありmaster、sub、detail、saiで
master(テキストボックス):
mas_id---mas_nm---mas_nm2
1--AAAA---BBB
2--CCCC---DDD
sub(リスト1):
mas_id---sub_id---sub_nm
1---1---11
1---2---12
2---1---21
2---2---22
detail(リスト2):
mas_id---sub_id---det_id---det_nm
1---1---1---111
1---1---2---112
1---1---3---113
1---2---1---121
1---2---2---122
1---3---1---131
sai(リスト3):
mas_id---sub_id---det_id---sai_id---sai_nm
1---1---1---1---1111
1---1---1---2---1112
1---1---1---3---1113
1---1---2---1---1121
---以下省略---
としています。同じ名前のものは一対多のリレーションをそれぞれつけています
例:
master sub deta
mas_id---mas_id---mas_id
mas_nm sub_id----sub_id
お礼
すごい!!そのままこのコマンドにリダイレクトかけたら ユニーク行だけ抽出されました!! ありがとうございます。