30

データベースに既に存在する行を無視したかったので、LOAD DATA INFILEコマンドを使用していくつかの問題に遭遇しました。次のようなデータを含むテーブルがあるとします。

id  |name   |age
--------------------
1   |aaaa   |22
2   |bbbb   |21
3   |bbaa   |20
4   |abbb   |22
5   |aacc   |22

id は自動インクリメント値です。私が持っているcsvファイルには、次のようなデータが含まれています。

"cccc","14"
"ssee","33"
"dddd","22"
"aaaa","22"
"abbb","22"
"dhgg","34"
"aacc","22"

行を無視したいのですが、

    "aaaa","22"
    "abbb","22"
    "aacc","22"

残りをテーブルにアップロードします。すべてをテーブルにアップロードするクエリは次のとおりです。

    LOAD DATA INFILE 'member.csv'
    INTO TABLE tbl_member
    FIELDS TERMINATED BY ','
           ENCLOSED BY '"'
           ESCAPED BY '"'
           LINES TERMINATED BY '\n'
    (name, age);

このタスクで私を助けてください..それは大歓迎です..私は多くのリンクを試しましたが、助けにはなりませんでした:(

4

3 に答える 3

59

age 列に UNIQUE インデックスを作成してから、次のようにします。

LOAD DATA INFILE 'member.csv'
IGNORE INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);
于 2012-11-16T23:03:19.367 に答える
6

1 つの方法は、一時テーブルを使用することです。これにアップロードし、SQL を使用して一時テーブルから tbl_member を更新します。

INSERT INTO tbl_member
SELECT Field1,Field2,Field3,... 
FROM temp_table
WHERE NOT EXISTS(SELECT * 
             FROM tbl_member 
             WHERE (temp_table.Field1=tbl_member.Field1 and
                   temp_table.Field2=tbl_member.Field2...etc.)
            )
于 2012-10-15T09:52:07.133 に答える
1

複数の列に一意のインデックスを作成できます。LOAD DATA は、それらすべての列の既存の行に一致する行を挿入しません。

例 ALTER TABLE tbl_member ADD UNIQUE unique_index(name,age)

于 2018-05-30T08:03:30.447 に答える