0

CSV ファイルからデータをアップロードするテーブルがあります。

フィールドは次のようなものです。

StudentName | SubjectName| Result
---------------------------------
Adam        | Math       | Fail
Bob         | History    | Pass
Catherine   | Math       | Pass
Dave        | Science    | Fail
Evan        | History    | Pass

ここでの主キーは (StudentName,SubjectName)

次のコードを使用して、データをテーブルに取得します。

Load data local infile 'C:\\Test.csv' INTO TABLE test_table
Fields terminated by ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
Lines terminated by '\n'
ignore 1 lines;

インポートする必要がある csv ファイルが複数あります。キーが重複している可能性があります。重複が見つかったときに特定のフィールドを更新しようとしています。

例: 重複がある場合、 UPDATE field RESULT if : value for result in the duplicate entry is "Pass". 各 csv ファイルは、テストが実施される日ごとになります。生徒が少なくとも 1 回は合格した場合、表にはそれが反映されている必要があります。

これを実現するには、コードをどのように変更すればよいですか?

4

2 に答える 2

0

最初に、新しい各ファイルを一時テーブルにロードします。これにより、実際のテーブルに挿入する際のオプションが増えます。次のようなもの:

  1. LOAD DATA FILE ... INTO TABLE temporary_test_table
  2. INSERT INTO test_table SELECT * FROM temporary_test_table ON DUPLICATE KEY ...
  3. TRUNCATE temporary_test_table
于 2013-04-03T17:51:11.757 に答える
0

ロード スクリプト自体は、テーブルの挿入と更新を一緒に行うのに役立ちません。最初にCSVファイルを一時テーブルにロードしてから、スクリプトを使用して最終テーブルに「Upsert」を実行し、その後一時テーブルを切り捨てるか、一時テーブルを作成して削除するたびに行うことができます。参照用のリンクを追加

于 2013-04-03T17:47:43.287 に答える