同じテーブルのある列から別の列に値をコピーする


168

ある列から別の列に値をコピーするにはどうすればよいですか?私が持っています:

Database name: list
number | test
123456 | somedata
123486 | somedata1
232344 | 34

欲しい:

Database name: list
number | test
123456 | 123456
123486 | 123486
232344 | 232344

どのmysqlクエリが必要ですか?

回答:


362

問題のコードの短い答えは次のとおりです。

UPDATE `table` SET test=number

これtableはテーブル名であり、これは重大なアクセント(別名バックティック `)で囲まれています。これは、キーワードをエスケープするための MySQLの規則(TABLEその場合はキーワード)であるためです。

注意してください、これはかなり危険なクエリでtestあり、テーブルのすべての行の列のすべてをワイプして、number(値に関係なく)

WHERE句を使用してクエリを特定の行セットのみに制限するのが一般的です。

UPDATE `products` SET `in_stock` = true WHERE `supplier_id` = 10

22
これは、開発者が素人のように考えたまれな状況の1つです。
Zaxter 2016年

9
update command...に慣れていない場合は注意してください。WHERE句がない場合、このコマンドはテーブル内のupdate すべてのレコードを対象にします。
gmo

とても簡単!ありがとうございました!うわー!
JimboSlice 2017年

1
@gmoが警告したように、大量のデータを消去する深刻な可能性。最初にデータベースのバックアップを作成してから、WHERE句を指定してクエリを実行し、1行に制限することを検討してください。結果に満足したら、WHERE句を削除します。
blogo '19

驚くばかり。それについては考えていませんでした。ありがとう。
Onkar Musale

28
UPDATE `table_name` SET `test` = `number`

プロセスで数学的な変更を行ったり、MySQL関数を使用して値を変更したりすることもできます。



8

注意:更新列の順序は重要です

良い:私が欲しいものは、既存のステータス値をPrevStatusに保存します

UPDATE Collections SET  PrevStatus=Status, Status=44 WHERE ID=1487496;

BAD:StatusとPrevStatusはどちらも44になります

UPDATE Collections SET  Status=44, PrevStatus=Status WHERE ID=1487496;

しかし、なぜStatus = 44を設定しているのですか?
Sceletia 2018年

@sceletiaは問題を示す任意の値
zzapper

6

以下を試してください:

UPDATE `list` SET `test` = `number` 

「number」からすべての値のコピーを作成し、「test」に貼り付けます


3

以下は私のために働いた。

  1. クエリエディターアプリケーションでセーフモードを使用していないことを確認します。もしそうなら、それを無効にしてください!
  2. 次に、次のSQLコマンドを実行します

テーブルの場合、「test_update_cmd」、ソース値列col2、ターゲット値列col1、条件列col3:-

UPDATE  test_update_cmd SET col1=col2 WHERE col3='value';

幸運を!


-7

あなたは手順でもそれを行うことができるので、これのための手順があります

 DELIMITER $$
 CREATE PROCEDURE copyTo()
       BEGIN
               DECLARE x  INT;
            DECLARE str varchar(45);
              SET x = 1;
            set str = '';
              WHILE x < 5 DO
                set  str = (select source_col from emp where id=x);
            update emp set target_col =str where id=x;      
            SET  x = x + 1;
                END WHILE;

       END$$
   DELIMITER ;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.