MS Access で not in をしたい場合


本来の業務ですと、大型のデータベースを使って、SQLを駆使して必要なデータを抽出するわけですが、大学院の研究案件でちょっとしたデータなので、マイクロソフトのAccessでデータ操作・編集をしています。

ところが・・・このSQLが本当に変わっていて、not in なんてしようものなら、私のPCで32GBのメモリを積んでいるのですがそれですら、固まってしまいます。

ですが、たとえばMy SQLなどを使ってデータベースを作るのも時間がかかりますし、Accessを使っているわけです。

さて、どうしてもやりたい not in を使っての抽出ですが、こんな形でやるのがよいでしょう。

●普通のSQLでやる場合

select  a.レシートID, a.顧客ID, a.販売店舗, a.来店時間,
from 販売履歴_ALL  a
where a.レシートID
 not in (
     select b.レシートID
     from 販売履歴_通常 b)
;

●Accessを使う場合

select レシートID, 顧客ID, 販売店舗, 来店時間
from (
select  a.レシートID, a.顧客ID, a.販売店舗, a.来店時間,
               b.レシートID as tmpID
from 販売履歴_ALL  a left outer join 販売履歴_通常 b
on a.レシートID=b.レシートID
) tmp  
where tmpID is null
;

教訓として・・・
・MS-Accessでは not in は、ほぼ使えない。
・いったん left outer でジョインして、不一致分を抽出する

ということを覚えておくとよいでしょう。

おそらくこの記事はかなり役に立ったと思いますので、
下のランキングのところ、ぽちっとしていただきますと幸甚です。よろしくお願いいたします。(笑)

(気に入ったら投票をお願いします!)

にほんブログ村 経営ブログへ
にほんブログ村

~~お役立ち情報~~

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください