私は2つのテーブルを持っています: t1and t2
-t2という名前の列が1つしかありませんstuff(60.000エントリ)。
- (空)t1を含む 15 の列があります。約650.000のエントリがあります。stufft1
照合するものが何もない場合、データをインポートするにはどうすればよいt2.stuffですか? (空のフィールドにデータt1.stuffを入力したいだけで、IDの一致などは気にしません。)t1.stufft2.stuff
最良のケース (私が思うに) は、このクエリを約 11 回実行するとt1.stuff、空のフィールドt1.stuffが残っていないため、すべてのフィールドが入力されることです。
テーブルがどのように見えるかの例を次に示します。
t1:
|__a___|_b_|_c_|stuff|...|
|___308|foo|bar|_____|baz|
|___312|foo|bar|_____|baz|
...
|655578|foo|bar|_____|baz|
t2:
|___stuff___|
|some_info_1|
|some_info_2|
...
|some_info_n|
たぶん、複数の手順が必要です...
アップデート
誰かが同様の問題を抱えている場合に備えて、私が行った解決策は次のとおりです。すべてのクレジットは、私を正しい方向に向けるためにユーザーnurdglawに送られます。だからここに行きます:
自動インクリメント番号が入力された問題のテーブルに新しい列を追加します(
alter table t1 auto_increment = 1このコードのエラーを回避するために、主キーの自動インクリメントを一時的に無効にしました)ALTER TABLE t1 ADD COLUMN new_column INTEGER UNIQUE AUTO_INCREMENT;t2 についても同じことを行いました。2 番目のテーブルがまだない場合は、次のようにすることができます:
CREATE TABLE t2 (id INTEGER PRIMARY KEY AUTO_INCREMENT,t2_data_column VARCHAR(255));<-- 必要に応じて数値を調整し、
データを次のようにインポートします。
LOAD DATA LOCAL INFILE 'path_on_your_server/data_file.csv'
INTO TABLE t2
LINES TERMINATED BY '\r\n'
(t2_data_column)照合するものができたので、次の操作
INNER JOINt1をt2行うことができます: Add the data fromt2tot1
UPDATE t1 AS s
JOIN t2 AS t ON t.id=s.new_column
SET s.stuff=t.t2_data_column;<--stuffwas the column int1I want to import the data to.- 混乱
DROP TABLE t2;
ALTER TABLE t1 DROP COLUMN new_column;
を片付ける 主キーの自動インクリメントを再度有効にし、以前に使用していた場合は、新しい行に必要な数に設定します。
これで完了です。
もう 1 つ注意: 最初の質問に入力した 60.000 エントリだけを使用するのではなく、データをオフラインで調整し、この方法で必要な 650.000 エントリを一度にインポートすることにしました。しかし、任意の数のデータでそれを実行し、必要なものと一致させるというアイデアが得られます。