Skopiuj wartości z jednej kolumny do drugiej w tej samej tabeli


168

Jak mogę skopiować wartości z jednej kolumny do drugiej? Mam:

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

Chcę mieć:

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

Jakie zapytanie mysql powinienem mieć?

Odpowiedzi:


362

Krótka odpowiedź na omawiany kod to:

UPDATE `table` SET test=number

Tutaj tablejest nazwa tabeli otoczona poważnym akcentem (aka back-tick), ponieważ jest to konwencja MySQL na unikanie słów kluczowych (iw TABLEtym przypadku jest to słowo kluczowe).

UWAŻAJ, że jest to dość niebezpieczne zapytanie, które wyczyści wszystko w kolumnie testw każdym wierszu tabeli, zastępując je number(niezależnie od wartości)

Częściej używa się WHEREklauzuli, aby ograniczyć zapytanie tylko do określonego zestawu wierszy:

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

22
To jeden z tych rzadkich przypadków, w których programiści myśleli jak laicy.
Zaxter

9
Ostrożnie, jeśli nie znasz klauzuli update command... Bez klauzuli WHERE to polecenie spowoduje update WSZYSTKIE rekordy w tabeli.
gmo

Tak prosty! Dziękuję Ci! Łał!
JimboSlice

1
Poważny potencjał usunięcia dużej ilości danych, jak ostrzega @gmo. Rozważ najpierw wykonanie kopii zapasowej bazy danych, a następnie uruchom zapytanie z klauzulą ​​WHERE, aby ograniczyć ją do jednego wiersza. Jeśli jesteś zadowolony z wyniku, usuń klauzulę WHERE.
blogo

Niesamowite. nie myślałem o tym. Dzięki.
Onkar Musale

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

Możesz również wprowadzić jakiekolwiek zmiany matematyczne w procesie lub użyć funkcji MySQL, aby zmodyfikować wartości.



8

UWAGA : kolejność kolumn aktualizacji jest krytyczna

DOBRE : To, czego chcę, zapisuje istniejącą wartość statusu w PrevStatus

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

BAD : Status i PrevStatus kończą się na 44

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

Dlaczego jednak ustawiasz Status = 44?
Sceletia,

@sceletia to tylko dowolna wartość, aby zademonstrować problem
zzapper

6

spróbuj wykonać następujące czynności:

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

tworzy kopię wszystkich wartości z „number” i wkleja ją do „test”


3

Następujące pracowały dla mnie ...

  1. Upewnij się, że nie używasz trybu bezpiecznego w aplikacji edytora zapytań. Jeśli tak, wyłącz to!
  2. Następnie uruchom następujące polecenie sql

w przypadku tabeli powiedzmy „test_update_cmd”, kolumna wartości źródłowej col2, kolumna wartości docelowej col1 i kolumna warunku col3: -

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

Powodzenia!


-7

możesz to zrobić również za pomocą procedury, więc mam do tego procedurę

 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 ;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.