2008-08-22 10 views
0

OK、ここに私の問題があります。エクセルのスプレッドシートからアクセスデータベーステーブルにデータを読み込むときに2フィールドでフィルタリングする方法

スプレッドシートが作成されています。これらはデータベースにアップロードされます。私はアップロードから重複をフィルタリングする必要があります。これを行う唯一の方法は、各エントリに対して、2つのフィールドがすでにデータベースにあるエントリと同じでないことを確認することです。 1つのフィールドが同じであるということだけが重複を意味するわけではないので、 2つの特定のフィールドがあり、それらをFLDAとFLDBと呼ぶことができます。どちらも、データベース内のエントリと一致する必要があります。すでに1つのフィールドでフィルタリングすることができます。私はこれがサブクエリでなければならないと思っていますが、私はそれをどのように適用するか分かりません。 これは解読しにくいです。あなたが私の言いたいことがわからないかどうか尋ねるだけです。

答えて

1

私は同様の問題がありました。私の解決策は次のとおりでした:

  1. ステージングテーブルにインポートします。
  2. 重複
  3. を削除することが少しBFIだが、それ単なる作品

ライブテーブルに残されているものをコピーします。

0

CodeSlaveの回答を基に作成された「重複したクエリの検索」ウィザードを使用すると、重複を除外するクエリを簡単に作成できます。

もう1つのアプローチは、FLDAとFLDBでIDを設定することです。これにより、重複エントリがテーブルに書き込まれることさえ防止されます。もちろん、挿入操作が失敗したときにスローされる例外をキャッチする必要もあります。

1

クエリスーツですか?例:

INSERT INTO ToUpdate (Field1, Field2) 
SELECT e.H1, e.H2 
FROM (SELECT * FROM [Sheet1$] IN '' [Excel 8.0;HDR=YES;IMEX=1;database=C:\Docs\LTD.xls]) As e 
LEFT JOIN ToUpdate ON (e.H2 = ToUpdate.Field2) AND (e.H1 = ToUpdate.Field1) 
WHERE ToUpdate.Field1 Is Null AND ToUpdate.Field2 Is Null 
0

重複を識別するために異なるフィールドFLDCはありますか?ユニークな、またはプライマリキーとして(FLDA、FLDB)を持っていると、あなたの問題を直ちに解決できるはずです。

、そのようなフィールドがあると仮定すると、あなたはこのような何かを試みることができる:

SELECT T1.FLDA, T1.FLDB, T1.FLDC 
FROM Table1 T1, Table1 T2 
WHERE T1.FLDA = T2.FLDA 
    AND T1.FLDB = T2.FLDB 
    AND T1.FLDC <> T2.FLDC 

ここでの欠点は、オリジナルと複製の両方が、このような何かによって返されるということです。重複を確認したいだけの場合は、おそらく、元の行を特定し、別のWHERE節または2つを追加する方法を見つけ出す必要があります。

オリジナルのものではなく重複した行しか得られないクエリを得ることができれば、それをDELETEクエリに変更するのはかなり簡単です。輸入の重複を避けるために

0

1 - テーブルの主キーが既に存在しない場合は、(一緒に)FLDAとFLDBに1を入れました。 FLDAとFLDB(共に)ではない主キーが既に存在する場合は、これらの2つのフィールドにインデックスを配置します。一意のyes、ignoreのnullはありません。

2 - スプレッドシートから、ウィザードまたはクエリを使用して表にインポートできます。インポートスプレッドシートウィザードでそれを行う場合は、インポートを開始する前にこのメッセージが表示されます:

「DB名がテーブルにすべてのデータを追加することができませんでした

。」フィールドの内容を0にレコードは削除され、キー違反のためにレコードが失われました(xx)。 (これらの失われたレコードが重複したので、本当の損失が。)...あなたがとにかく続行しますか?」

[はい]をクリックし、スプレッドシートから行をインポートする。いいえ重複がインポートされません。

か、輸入のためのクエリを使用して、SQLビューで新しいクエリにこれを貼り付ける([挿入]> [クエリ]> [デザイン]ビュー、[閉じる]ボタン;メニュー:メニュー。[表示]> [SQLビュー)

INSERT INTO tblInput 
    SELECT XLS.* 
    FROM tblInput AS T RIGHT JOIN 
    [Excel 8.0;IMEX=1;HDR=Yes;DATABASE=c:\data.xls;].[Sheet1$] AS XLS 
    ON T.FLDA = XLS.FLDA AND T.FLDB = XLS.FLDB 
    WHERE ISNULL(T.FLDA) AND ISNULL(T.FLDB); 

変更パス、 c:\ data.xlsをパスに、Sheet1 $をシート名に、tblInputをテーブル名に、FLDAとFLDBを列名に変換します。スプレッドシートにヘッダー(列名)がない場合、HDR = Y HDR =いいえ

0

削除クエリを使用してSelect from Table 1 Group by X Having Y, Z, Aを使用してこれを行いました。そして、私はフロントエンドユーザーのための実行クエリボタンを置く。

すべてのあなたの助けをお祈りします。

関連する問題