0

私は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に送られますだからここに行きます:

  1. 自動インクリメント番号が入力された問題のテーブルに新しい列を追加します(alter table t1 auto_increment = 1このコードのエラーを回避するために、主キーの自動インクリメントを一時的に無効にしました)ALTER TABLE t1 ADD COLUMN new_column INTEGER UNIQUE AUTO_INCREMENT;

  2. 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)

  3. 照合するものができたので、次の操作INNER JOIN t1t2行うことができます: Add the data from t2to t1
    UPDATE t1 AS s
    JOIN t2 AS t ON t.id=s.new_column
    SET s.stuff=t.t2_data_column;<-- stuffwas the column in t1I want to import the data to.

  4. 混乱
    DROP TABLE t2;
    ALTER TABLE t1 DROP COLUMN new_column;
    を片付ける 主キーの自動インクリメントを再度有効にし、以前に使用していた場合は、新しい行に必要な数に設定します。

これで完了です。

もう 1 つ注意: 最初の質問に入力した 60.000 エントリだけを使用するのではなく、データをオフラインで調整し、この方法で必要な 650.000 エントリを一度にインポートすることにしました。しかし、任意の数のデータでそれを実行し、必要なものと一致させるというアイデアが得られます。

4

2 に答える 2

1

INSERT ステートメントは、テーブルに新しい行を作成します。既存の行に UPDATE が必要です

これを行う簡単な方法は、extern スクリプト言語を使用することです

; ここに反乱の例があります

; softinnov の mysql ライブラリを使用すると仮定します。

; a_は、t1 の行に対する一意のキーの名前です。

データベース: mysql://user:pass@mysql を開く

insert db {select * from t1}

t1rows: データベースをコピー

insert db {select * from t2}

t2rows: データベースをコピー

foreach 行 t1rows [

insert db [ {update t1 set t1.stuff = ? ここで、t1。a_ = ?} t2rows/1/1 行/1]

どちらかの尾?次の t2rows [

  t2rows: head t2rows

] [

  t2rows: next t2rows

]

]

申し訳ありませんが、あなたの例のフォーマットと変数にはまだ問題があります

于 2013-06-15T18:37:25.470 に答える
0

これを試して

     INSERT INTO t1 (stuff)
     SELECT DISTINCT stuff FROM t2

役立つことを願っています

于 2013-06-15T12:59:08.843 に答える