ADODBを使って
エクセルデータをSQL操作する際
重複削除がうまくできなかったので
備忘録として残しておきます!
ADODBで失敗した重複削除のSQL文
コネクション条件
ThisWorkBookにコネクション。
マクロを回すとSheetに重複データが出て困る
と相談を受け、中身を見てみると
ADODBの
SELECT結果に重複データが混じっている
のが原因でした。
そこでSELECT文にデータを重複削除する
「DISTINCT」
を追記しようと考えました。
基本的なDISTINCT文
これで複数カラムで同じレコードは
重複削除されますね。
エラーが発生
基本的なDISTINCT文に沿って
SQLを書き直したのですが
何度やっても以下エラーが発生。。
エラー文
複数ステップのOLE DB操作でエラーが発生しました。
ADODBで成功した重複削除のSQL文
サブクエリでDISTINCT
簡単に書くとこんな感じです!
サブクエリ内でDISTINCTして
その結果をSELECTすると
うまく動作しました。
Microsoft Access SQL と ANSI SQL
SQLの規格について
ADODBのプロバイダで指定した
Accessデータベースエンジンは
Microsoft Access SQL
一般的にDBで扱っているSQLは
ANSI SQL
Microsoft Access SQLは
ANSI SQLをほぼ準拠しているけど
100%ではないらしい。
その中に
「 DISTINCT 集計関数の参照 」
は Microsoft Access SQL で
サポートされていません。
とあった!
けど…
SELECT COUNT( DISTINCT col1 )…
がサポートされてないと言ってるので
SELECT DISTINCT col1 …
これはうまく処理できるのでは?…
まだ自分が気づいていない事がありそう・・。
もう少し調べてみようと思います。
参照:Microsoft Access SQL と ANSI SQL の比較
困っている人がいれば
ひとつの参考として試してみてください。