2016-08-31 1 views
0

最近、デモの目的で私の以前のプロジェクトの実データを使用する必要がありました。ほとんどのデータは実際のものですが、名前や電子メールなどの個人情報はランダムに生成されたデータに置き換えられる必要がありました。私は既にmockarooのようなサービスを使って数千の名前と電子メールを生成しています。大量の行をIDで更新するSQLコマンドがありますか?

SQLを使用してこれらのデータを簡単に挿入する方法はありますか?他のデータを保持する必要があるので、新しい行を挿入するのではなく、2つのフィールドしか更新できません。私は主キーとしてIDフィールドを持っていますが、実際の使用で行を削除するために連続していません。それがこの形式である場合は(必要ではない)がベストです:

UPDATE table 
    SET email = CASE 
         WHEN ID = 1 THEN "[email protected]" 
         etc.... 
       END 

編集:

Some SQL UPDATE statement 
("Russell Dixon", "[email protected]"), 
("Todd Gonzales", "sbi[email protected]"), 
("Roger Green", "[email protected]"), 
......... 
("Jason Anderson", "[email protected]"), 
("Gloria Larson", "[email protected]"), 
("Eric Bishop", "[email protected]") 
Some SQL statment or empty 
+0

どのようなRDBMSを使用しますか? –

+0

あなたは複数のUPDATE文を使用できませんか? –

+0

[複数の行を挿入する]の可能な複製(http://stackoverflow.com/questions/6889065/inserting-multiple-rows-in-mysql) –

答えて

0

はこれを試してみてください私はあなたの質問を再読し、何が必要だと思うだけの質量であります挿入:

INSERT INTO table (Column1, Column2) VALUES 
(Value1, Value2), (Value1, Value2) 
+0

"Russell Dixon"は更新される新しい名前です。元のデータには存在しません。 – cytsunny

+0

彼は一括更新を望み、挿入は望んでいない –

0

可能な方法は、それを行うには: -

INSERT INTO some_table(ID, name, email) 
SELECT sub1.ID, sub3.aName, sub3.aEmail 
FROM 
(
    SELECT ID, @seq1:[email protected] + 1 AS seq 
    FROM some_table 
    CROSS JOIN (SELECT @seq1 := 0) sub0 
) sub1 
INNER JOIN 
(
    SELECT aName, aEmail, @seq2:[email protected] + 1 AS seq 
    FROM 
    (
     SELECT "Russell Dixon" AS aName, "[email protected]" AS aEmail 
     UNION SELECT "Todd Gonzales", "[email protected]" 
     UNION SELECT "Roger Green", "[email protected]" 
     UNION SELECT "Jason Anderson", "[email protected]" 
     UNION SELECT "Gloria Larson", "[email protected]" 
     UNION SELECT "Eric Bishop", "[email protected]" 
    ) sub2 
    CROSS JOIN (SELECT @seq2 := 0) sub3 
) sub3 
ON sub1.seq = sub3.seq 
ON DUPLICATE KEY UPDATE name=VALUES(name), email=VALUES(email); 

これは、既存のテーブルからすべてのレコードを選択し、シーケンス番号を追加し、すべての更新名を取得してシーケンス番号を追加します。その後、レコードはシーケンス番号一致で結合され、挿入を行うためのソースとして使用されます。 ON DUPLICATE KEY UPDATEは更新時に使用され、レコードが変更されたランダム名と電子メールアドレスで更新されます。

多くのレコードでこれを行う場合は、テーブルに名前と電子メールアドレスを挿入し、定数を選択するのではなく、その中から選択するほうが簡単でしょう。

0

自動インクリメント列を持つ2つの一時テーブルを作成できます。これらの自動増分列を使用してそれらを結合することができます。

create temporary table tmp_userids (
    row_nr int auto_increment primary key, 
    user_id int 
) 
    select null as row_nr, id as user_id 
    from users 
; 

create temporary table tmp_fakedata (
    row_nr int auto_increment primary key, 
    name varchar(50), 
    email varchar(50) 
); 

insert into tmp_fakedata(name, email) values 
    ("Russell Dixon", "[email protected]"), 
    -- ........ 
    ("Eric Bishop", "[email protected]") 
; 

update user u 
join tmp_user_ids i on i.user_id = u.id 
join tmp_fakedata f on f.row_nr = i.row_nr 
set u.name = f.name, 
    u.email = f.email 
関連する問題