Jak mogę skopiować dane z jednej kolumny do drugiej w tej samej tabeli?


Odpowiedzi:


466

Co powiesz na to

UPDATE table SET columnB = columnA;

To zaktualizuje każdy wiersz.


1
To będzie również działać, jeśli chcesz przenieść do innych wartości stare kolumny i aktualizowania pierwszy: UPDATE table SET columnA = 'new value', columnB = columnA. Jak mówi inna odpowiedź - nie zapomnij o klauzuli WHERE, aby zaktualizować tylko to, czego potrzebujesz.
Carl di Ortus

5
Myślę, że w jakimś skomplikowanym procesie wykonującym pętlę przy każdym rekordzie, gdy odpowiedź jest tak prosta
deFreitas

6
@deFreitas Mądry człowiek powiedział mi: jeśli myślisz o napisaniu pętli, aby osiągnąć coś w SQL, robisz to źle.
Daniel Patrick

95
UPDATE table_name SET
    destination_column_name=orig_column_name
WHERE condition_if_necessary

10
@ Mark, to naprawdę ma sens, dlaczego jest to zaniżone? Miałem sytuację, w której muszę skopiować wartość daty z jednej kolumny do innych kolumn i dotyczy to NIEKTÓRYCH kolumn, a nie wszystkich. Konieczne byłoby więc umieszczenie GDZIE w oświadczeniu.
finnTheHumin

5
@finnTheHuman Pytanie pyta, jak „skopiować dane ze wszystkich rekordów”, na które wcześniej odpowiedzieć poprawnie, aby nic nie dodało
mmmmmm

7
@ Mark „Czym różni się to od starej zaakceptowanej odpowiedzi”, ma klauzulę WHERE. „więc to nic nie dodaje”, nie zgadzam się, dodaje coś. warto dołączyć klauzulę WHERE, JEŚLI KONIECZNE. powinniśmy być odpowiedzialni za głosowanie odpowiedzi. haters gon 'hate
finnTheHumin

W moim przypadku dodałem ostatnią kolumnę. UPDATE user SET last_seen = first_seen WHERE last_seen IS NULL
luckydonald

Nie zgadzam się z jednym z was. Ale nie chcę powiedzieć, kto! Gdzie klauzula działa jak uczta
Dzień Andrew

0

Spowoduje to zaktualizowanie wszystkich wierszy w tych kolumnach, jeśli tryb awaryjny nie jest włączony.

UPDATE table SET columnB = columnA;

Jeśli włączony jest tryb awaryjny, musisz użyć klauzuli where. Używam klucza podstawowego jako większego niż 0 w zasadzie wszystkie zostaną zaktualizowane

UPDATE table SET columnB = columnA where table.column>0;

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.