本来の業務ですと、大型のデータベースを使って、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 でジョインして、不一致分を抽出する
ということを覚えておくとよいでしょう。
おそらくこの記事はかなり役に立ったと思いますので、
下のランキングのところ、ぽちっとしていただきますと幸甚です。よろしくお願いいたします。(笑)
~~お役立ち情報~~