私は2つのテーブルを持っています: t1
and t2
-t2
という名前の列が1つしかありませんstuff
(60.000エントリ)。
- (空)t1
を含む 15 の列があります。約650.000のエントリがあります。stuff
t1
照合するものが何もない場合、データをインポートするにはどうすればよいt2.stuff
ですか? (空のフィールドにデータt1.stuff
を入力したいだけで、IDの一致などは気にしません。)t1.stuff
t2.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 JOIN
t1
をt2
行うことができます: Add the data fromt2
tot1
UPDATE t1 AS s
JOIN t2 AS t ON t.id=s.new_column
SET s.stuff=t.t2_data_column;
<--stuff
was the column int1
I want to import the data to.- 混乱
DROP TABLE t2;
ALTER TABLE t1 DROP COLUMN new_column;
を片付ける 主キーの自動インクリメントを再度有効にし、以前に使用していた場合は、新しい行に必要な数に設定します。
これで完了です。
もう 1 つ注意: 最初の質問に入力した 60.000 エントリだけを使用するのではなく、データをオフラインで調整し、この方法で必要な 650.000 エントリを一度にインポートすることにしました。しかし、任意の数のデータでそれを実行し、必要なものと一致させるというアイデアが得られます。