Access2007で作成しているmdb(Access 2000データベース)を、Excel2013から、VBA(ActiveX Data Objects 6.0 ADODB)を使ってSQLで操作しています。
ここで次の2フィールドからなる複合キーを主キーとするテーブル「案件情報」から、この複合キーを使ってWhere inで値を取り出したいです。
TABLE
1工事番号 2登録時刻
当初、次を試したのですが、Accessでは対応していないらしく、困っています。
AccessSQL
1select * 案件情報 where (工事番号,登録時刻) in (('値1','値2','値3'),('時刻1','時刻2','時刻3'))
自分で考えた方法1.
テーブル「案件情報」の設計を変えることは可能です(サロゲートキーにすることはできます)
ただし、I/F側(Excel側)にサロゲートキーの情報を保持することは、難しいです。
結局Excel側の2つの情報からAccess側のサロゲートキーを特定する方法が思いつかず、諦めました。
自分で考えた方法2.
AccessSQL
1select * 案件情報 where 工事番号+登録時刻 in ('値1時刻1','値2時刻2','値3時刻3')
これは、とりあえず所望の動作をするのですが、
主キーを演算してしまうとインデックスの恩恵を受けられないと思い、あまり好ましくなく思っています。
実際に恩恵がないのか(全検索になっているのか)については、調べる方法が解らなかったため、調べていないです。
Q1. 2つの情報を使って、インデックスの恩恵を受けられる形で、AccessでWhere inを実行、もしくは同じ結果を得る方法はありますか。
Q2. インデックスの恩恵を受けているか簡単に調べる方法はありますか。
どうぞよろしくお願いします。
案件情報は次のようなものです
工事番号 | 登録時刻 | 客先名 | 納期 | 品名 | 受注数量 |
---|---|---|---|---|---|
aaaa | 2019/01/01 10:00 | ○○株式会社 | 2019/02/01 | ねじ | 1 |
aaaa | 2019/01/02 10:00 | ○○株式会社 | 2019/02/03 | ねじ | 1 |
aaaa | 2019/01/03 10:00 | ○○株式会社 | 2019/03/01 | ねじ | 3 |
bbbb | 2019/01/01 10:00 | ○○株式会社 | 2019/02/01 | ナット | 3 |
bbbb | 2019/01/02 10:00 | ○○株式会社 | 2019/02/01 | ナット | 2 |
cccc | 2019/01/02 10:00 | □□株式会社 | 2019/02/01 | ねじ | 3 |
同じ工事番号で複数の登録時刻がある場合、最新の行のみ有効な値で、残りはログを残すためだけのデータです。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/11/21 23:50
2019/11/22 00:19