0

パイプで区切られた2つの異なるデータファイルがあります。一方はもう一方よりも大きいです。小さいファイル(ファイルB)に含まれているデータに基づいて、大きいファイル(ファイルAと呼びます)からデータを選択的に削除しようとしています。ファイルAにはすべてのデータが含まれ、ファイルBにはファイルAのデータの一部のみが含まれます。

ファイルBに含まれるすべてのデータをファイルAから削除する関数または既存のプログラムが必要です。次のような関数を念頭に置いていました。

Pseudo-code:

    while !eof(fileB) {
        criteria = readLine(fileB);
        lineToRemove = searchForLine(criteria, fileA);
        deleteLine(lineToRemove, fileA);
    }

しかし、その解決策は私には非常に非効率的です。ファイルAには23,000行あり、ファイルBには17,000行あります。また、ファイルBに含まれるデータは、文字通りファイルA全体に散在しています。

これを行うことができるプログラムがあれば、私はコードよりもそれを好むでしょう。私もコードにうるさくありません。C ++は私の強力な言語ですが、このデータファイルは近い将来SQLデータベースに変換される予定なので、SQL/PHPコードも得意です。

4

1 に答える 1

0

データベースに関係なく、2つのテーブルをSQLにロードします。この種の操作を行うことは、データベースが設計されている目的です。次に、次のコマンドを実行できます。

delete from A
    where A.criteria = (select B.criteria from B)

ただし、データをステージングテーブルに配置してから、SQLで必要なデータを作成してデータを入力します。何かのようなもの:

create table A ( . . . )

insert into A
    select *
    from StagingA
    where A.criteria not in (select B.criteria from StagingB)

(ここでは、「*」と列リストのない挿入を使用しました。実際には、列のリストが必要です。)

于 2012-12-20T20:48:54.520 に答える