Aynı tabloda bir sütundan diğerine değerleri kopyala


169

Bir sütundan diğerine nasıl kopya değerleri yapabilirim? Sahibim:

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

Ben sahip olmak istiyorum:

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

Hangi mysql sorgusu olmalı?

Yanıtlar:


363

Söz konusu kod için kısa cevap:

UPDATE `table` SET test=number

İşte tabletablo adı ve mezar aksanıyla (aka geri keneler `) çevrilidir, çünkü bu anahtar kelimelerden kaçmak için MySQL kuralıdır (ve TABLEbu durumda bir anahtar kelimedir).

DİKKAT, bu testtablonun her satırında sütunundaki her şeyi silerek number(değerine bakılmaksızın) oldukça tehlikeli bir sorgu olduğunu unutmayın.

WHERESorgunuzu yalnızca belirli satır kümesiyle sınırlamak için yan tümce kullanmak daha yaygındır :

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

22
Geliştiricilerin laymen gibi düşündüğü nadir olaylardan biri.
Zaxter

9
Eğer WHERE yan tümcesi update commandolmadan , bu komut tablodaki TÜM kayıtları bilmeyecektir. update
GDO

Çok basit! Teşekkür ederim! Vaov!
JimboSlice

1
@Gmo uyarısında olduğu gibi, çok fazla veriyi silmek için ciddi potansiyel. Önce veritabanının yedeğini almayı düşünün, ardından sorguyu bir satırla sınırlamak için WHERE yan tümcesiyle çalıştırın. Sonuçtan memnunsanız, WHERE yantümcesini kaldırın.
blogo

Muhteşem. bunu düşünmemiştim. Teşekkürler.
Onkar Musale

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

Ayrıca, işlemde herhangi bir matematiksel değişiklik yapabilir veya değerleri değiştirmek için MySQL işlevlerini kullanabilirsiniz.



8

DİKKAT : Güncelleme sütunlarının sırası kritiktir

İYİ : İstediğim Varolan Durum Değerini PrevStatus'a kaydediyor

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

KÖTÜ : Status & PrevStatus her ikisi de 44 olarak sonuçlanır

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

Durum = 44'ü neden ayarlıyorsunuz?
Sceletia

@sceletia sorunu göstermek için sadece keyfi bir değer
zzapper

6

aşağıdakileri deneyin:

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

"sayı" dan tüm değerlerin bir kopyasını oluşturur ve "test" e yapıştırır


3

Aşağıdaki benim için çalıştı ..

  1. Sorgu düzenleyici uygulamanızda Güvenli modu kullanmadığınızdan emin olun. Eğer öyleyse, devre dışı bırakın!
  2. Sonra aşağıdaki sql komutunu çalıştırın

bir tablo için 'test_update_cmd', kaynak değer sütunu col2, hedef değer sütunu col1 ve koşul sütunu col3 deyin: -

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

İyi şanslar!


-7

ayrıca bunun için bir prosedür var bu yüzden Prosedür ile yapabilirsiniz

 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 ;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.