Làm cách nào để sao chép dữ liệu từ cột này sang cột khác trong cùng một bảng?


Câu trả lời:


464

Còn cái này thì sao

UPDATE table SET columnB = columnA;

Điều này sẽ cập nhật mỗi hàng.


1
Điều này cũng sẽ hoạt động nếu bạn muốn chuyển giá trị cũ sang cột khác và cập nhật giá trị đầu tiên : UPDATE table SET columnA = 'new value', columnB = columnA. Giống như câu trả lời khác nói - đừng quên mệnh đề WHERE để chỉ cập nhật những gì cần thiết.
Carl di Ortus

5
Tôi nghĩ trong một số Proc phức tạp thực hiện một vòng lặp ở mỗi bản ghi khi câu trả lời rất đơn giản
deFreitas

6
@deFreitas Một người đàn ông khôn ngoan đã nói với tôi: nếu bạn đang nghĩ về việc viết một vòng lặp để hoàn thành một cái gì đó trong SQL thì bạn đã làm sai.
Daniel Patrick

95
UPDATE table_name SET
    destination_column_name=orig_column_name
WHERE condition_if_necessary

10
@Mark, điều này thực sự có ý nghĩa, tại sao điều này bị hạ cấp? Tôi đã có một tình huống mà tôi cần sao chép một giá trị ngày từ một cột sang các cột khác và nó chỉ áp dụng cho MỘT SỐ cột, chứ không phải tất cả. Vì vậy, có một WHERE trong tuyên bố sẽ là cần thiết.
finnTheHumin

5
@finnTheHuman Câu hỏi hỏi làm thế nào để "sao chép dữ liệu từ tất cả các bản ghi" mà câu trả lời trước đó trả lời đúng để điều này không thêm bất cứ điều gì
user151019

7
@Mark "Điều này khác với câu trả lời cũ được chấp nhận như thế nào", nó có mệnh đề WHERE. "Vì vậy, điều này không thêm bất cứ điều gì", tôi không đồng ý, nó thêm một cái gì đó. đó là một điểm tốt để bao gồm mệnh đề WHERE NẾU CẦN THIẾT. chúng ta nên có trách nhiệm về việc hạ thấp câu trả lời. kẻ ghét gon 'ghét
finnTheHumin

Trong trường hợp của tôi, tôi đã thêm một cột last_seen. UPDATE user SET last_seen = first_seen WHERE last_seen IS NULL
luckydonald

Tôi không đồng ý với một trong các bạn. Nhưng không muốn nói ai!. Trường hợp mệnh đề hoạt động giống như một điều ước
Ngày Andrew

0

Điều này sẽ cập nhật tất cả các hàng trong các cột đó nếu chế độ an toàn không được bật.

UPDATE table SET columnB = columnA;

Nếu chế độ an toàn được bật thì bạn sẽ cần sử dụng mệnh đề where. Tôi sử dụng khóa chính vì lớn hơn 0 về cơ bản tất cả sẽ được cập nhật

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

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.