Kopieren Sie Werte von einer Spalte in eine andere in derselben Tabelle

168

Wie kann ich Werte von einer Spalte in eine andere kopieren? Ich habe:

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

Ich möchte haben:

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

Welche MySQL-Abfrage sollte ich haben?

Lucas
quelle

Antworten:

362

Die kurze Antwort für den fraglichen Code lautet:

UPDATE `table` SET test=number

Hier tableist der Tabellenname und er ist von einem schwerwiegenden Akzent (auch bekannt als Back-Ticks) umgeben, da dies eine MySQL-Konvention ist, um Schlüsselwörtern zu entkommen (und TABLEin diesem Fall ein Schlüsselwort ist).

ACHTUNG, dass dies eine ziemlich gefährliche Abfrage ist, die alles in der Spalte testin jeder Zeile Ihrer Tabelle löscht und durch das ersetzt number(unabhängig von ihrem Wert).

Es ist üblicher, WHEREKlauseln zu verwenden, um Ihre Abfrage nur auf bestimmte Zeilen zu beschränken:

UPDATE `products` SET `in_stock` = true WHERE `supplier_id` = 10
Juicy Scripter
quelle
22
Dies ist eine der seltenen Situationen, in denen Entwickler wie Laien gedacht haben.
Zaxter
9
Vorsicht, wenn Sie mit der update command... Ohne WHERE- Klausel nicht vertraut sind, werden mit diesem Befehl update ALLE Datensätze in der Tabelle gespeichert.
GVO
So einfach! Danke dir! Beeindruckend!
JimboSlice
1
Ernstes Potenzial zum Löschen vieler Daten, wie @gmo warnte. Erstellen Sie zuerst eine Sicherungskopie der Datenbank und führen Sie dann die Abfrage mit einer WHERE-Klausel aus, um sie auf eine Zeile zu beschränken. Wenn Sie mit dem Ergebnis zufrieden sind, entfernen Sie die WHERE-Klausel.
Blogo
Genial. habe nicht darüber nachgedacht. Vielen Dank.
Onkar Musale
28
UPDATE `table_name` SET `test` = `number`

Sie können auch mathematische Änderungen im Prozess vornehmen oder MySQL-Funktionen verwenden, um die Werte zu ändern.

Tschechologie
quelle
9

Versuche dies:

update `list`
set `test` = `number`
Jürgen d
quelle
ist nicht listdb name?
Juicy Scripter
Liste ist <Tabellenname>
user2439124
8

ACHTUNG : Die Reihenfolge der Aktualisierungsspalten ist kritisch

GUT : Was ich möchte, speichert den vorhandenen Statuswert in PrevStatus

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

BAD : Status & PrevStatus enden beide als 44

UPDATE Collections SET  Status=44, PrevStatus=Status WHERE ID=1487496;
zzapper
quelle
Warum setzen Sie jedoch Status = 44?
Sceletia
@sceletia nur ein beliebiger Wert, um das Problem zu demonstrieren
zzapper
6

Versuchen Sie Folgendes:

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

Es erstellt eine Kopie aller Werte aus "Zahl" und fügt sie in "Test" ein.

Jigneshsinh Rathod
quelle
3

Folgendes hat bei mir funktioniert ..

  1. Stellen Sie sicher, dass Sie in Ihrer Abfrage-Editor-Anwendung nicht den abgesicherten Modus verwenden. Wenn ja, deaktivieren Sie es!
  2. Führen Sie dann den folgenden SQL-Befehl aus

Für eine Tabelle sagen Sie 'test_update_cmd', Quellwertspalte col2, Zielwertspalte col1 und Bedingungsspalte col3: -

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

Viel Glück!

nitinr708
quelle
-7

Sie können es auch mit Prozedur tun, also habe ich eine Prozedur dafür

 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 ;
Karan Kumar Mahto
quelle