0

OK、ここに私の問題がありますが、会社の慣行をインターネットに掲載したことで解雇された理由について具体的すぎることはありません。

作成されたスプレッドシートがあります。これらはデータベースにアップロードされます。アップロードから重複を除外する必要があります。これを行う唯一の方法は、すべてのエントリについて、その 2 つのフィールドがデータベースに既に存在するエントリと同じではないことを確認することです。1 つのフィールドが同じだからといって、重複しているとは限りません。2 つの特定のフィールドがあり、それらを FLDA および FLDB と呼ぶことができ、両方ともデータベース内のエントリとすでに一致している必要があります。すでに 1 つのフィールドでフィルタリングできます。これはサブクエリでなければならないと思っていますが、それを適用する方法がわかりません。これは説明するのが難しいです。私が何を意味するのかわからない場合は、聞いてください。

4

7 に答える 7

1

I had a similar problem. My solution was to:

  1. import into a staging-table.
  2. delete the duplicates
  3. copy what's left over into the live table

It's a little BFI, but it just plain works.

于 2008-08-22T16:17:52.673 に答える
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
于 2008-08-23T22:34:33.647 に答える
0

How are you loading them into the database? Is this with your own code to read the Excel files? You can read the Excel files using ADO/ADO.NET with the right connection string. Then you could read the data using a query that would weed out the dupes.

于 2008-08-22T16:25:18.597 に答える
0

インポートでの重複を避けるには:

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

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

「DB name はすべてのデータをテーブルに追加できませんでした。

「キー違反により、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=Yes を HDR=No に変更します。

于 2008-09-16T07:51:07.143 に答える
0

これは、削除クエリを使用してからSelect from Table 1 Group by X Having Y, Z, A. そして、フロントエンドユーザー向けにクエリ実行ボタンを配置しました。

皆様のご協力に乾杯。

于 2008-09-29T16:16:33.400 に答える
0

Access は、CodeSlave の回答に基づいて、重複を除外するためのクエリを簡単に作成できる重複クエリの検索ウィザードを提供します。

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

于 2008-08-23T21:33:32.640 に答える
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 句を 1 つまたは 2 つ追加する必要があります。

元の行ではなく重複する行のみを提供するクエリを取得できる場合、それを DELETE クエリに変更するのは非常に簡単です。

于 2008-08-25T14:23:49.020 に答える