Sao chép các giá trị từ cột này sang cột khác trong cùng một bảng


168

Làm cách nào để tạo một giá trị sao chép từ cột này sang cột khác? Tôi có:

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

Tôi muốn có:

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

Tôi nên có truy vấn mysql nào?

Câu trả lời:


362

Câu trả lời ngắn cho mã trong câu hỏi là:

UPDATE `table` SET test=number

Đây tablelà tên bảng và được bao quanh bởi dấu trọng âm (còn gọi là back-ticks `) vì đây là quy ước của MySQL để thoát từ khóa (vàTABLE là một từ khóa trong trường hợp đó).

HÃY THỬ, rằng đây là truy vấn khá nguy hiểm sẽ xóa sạch mọi thứ trong cột testtrong mỗi hàng của bảng thay thế nó bằngnumber (bất kể giá trị của nó)

Việc sử dụng WHEREmệnh đề để giới hạn truy vấn của bạn chỉ ở một nhóm hàng cụ thể là phổ biến hơn :

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

22
Đó là một trong những dịp hiếm hoi mà các nhà phát triển đã nghĩ như giáo dân.
Zaxter

9
Cẩn thận nếu bạn không quen thuộc với update command... Nếu không có mệnh đề WHERE , lệnh này sẽ update TẤT CẢ các bản ghi trong bảng.
gmo

Quá đơn giản! Cảm ơn bạn! Ồ
JimboSlice

1
Tiềm năng nghiêm trọng để xóa rất nhiều dữ liệu, như @gmo cảnh báo. Trước tiên hãy xem xét việc sao lưu cơ sở dữ liệu, sau đó chạy truy vấn với mệnh đề WHERE để giới hạn nó trong một dòng. Nếu bạn hài lòng với kết quả này, hãy xóa mệnh đề WHERE.
blogo 19/12/17

Tuyệt vời. đã không nghĩ về điều đó. Cảm ơn.
Onkar Musale

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

Bạn cũng có thể thực hiện bất kỳ thay đổi toán học nào trong quy trình hoặc sử dụng các hàm MySQL để sửa đổi các giá trị.



8

THƯỞNG : Thứ tự các cột cập nhật là rất quan trọng

TỐT : Những gì tôi muốn lưu Giá trị Trạng thái hiện tại vào PrevStatus

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

BAD : Status & PrevStatus đều kết thúc là 44

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

Tại sao bạn lại đặt Status = 44?
Sceletia

@sceletia chỉ là một giá trị tùy ý để chứng minh vấn đề
zzapper 21/03/18

6

thử làm theo:

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

nó tạo bản sao của tất cả các giá trị từ "số" và dán nó vào "kiểm tra"


3

Sau đây làm việc cho tôi ..

  1. Đảm bảo bạn không sử dụng Chế độ an toàn trong ứng dụng soạn thảo truy vấn của mình. Nếu bạn là, vô hiệu hóa nó!
  2. Sau đó chạy theo lệnh sql

đối với bảng, 'test_update_cmd', cột giá trị nguồn col2, cột giá trị đích col1 và cột điều kiện col3: -

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

Chúc may mắn!


-7

bạn cũng có thể làm điều đó với Thủ tục vì vậy tôi có một quy trình cho việc này

 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 ;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.