2011-06-24 74 views
17

Tôi có một bảng cho phép gọi bảng đó1 và dữ liệu trong hai cột đã bị hủy.Cập nhật MySQL với phụ chọn

May mắn là tôi có bản sao lưu cũ của bảng.

Trong bản sao lưu cũ, các giá trị cho hai cột được đề cập là chính xác nhưng phần còn lại của các cột bị lỗi thời vì vậy tôi không thể nhập toàn bộ kết xuất.

Vì vậy, thay vào đó tôi đã nhập nó vào một bảng khác mà tôi sẽ gọi table2. Mỗi bản ghi có một id giống nhau ở cả hai bảng. Vì vậy, về cơ bản tôi cần một truy vấn sẽ đi qua từng bản ghi trong bảng 1 và cập nhật cột1 và cột 2 với các giá trị tương ứng từ bảng 2.

+0

Tại sao bạn không chỉ tạo hai cột trong bảng 1 và nhập dữ liệu từ các cột tương ứng của bảng 2? –

Trả lời

41

gốc bảng là table1 và bảng sao lưu là table2

UPDATE table1 t1 JOIN table2 t2 ON t1.id = t2.id 
SET t1.col1 = t2.col1, t1.col2 = t2.col2, ... 
+0

Đây là cách phù hợp để thực hiện. Cập nhật nhiều bảng có thể rất hữu ích http://dev.mysql.com/doc/refman/5.1/en/update.html –

14

này sẽ làm việc trên tất cả các hương vị của cơ sở dữ liệu SQL:

update table1 t set 
column1 = (select column1 from old_table where id = t.id), 
column2 = (select column2 from old_table where id = t.id); 

Không cần cho bất kỳ chức năng đặc biệt/tổng hợp, vì trận đấu id sẽ tung ra đúng một hàng.

+0

Câu trả lời tốt hơn nếu bạn muốn làm việc với các cấu trúc bảng hoàn toàn khác nhau. – Soullivaneuh

1

Tôi nghĩ rằng bạn có thể thử một cái gì đó như thế này:

UPDATE table1 SET table1field = (SELECT MAX(table2.table2field) FROM table2 WHERE table1.table1field = table2.table2field) 
0

đang chạy dưới đây truy vấn nhưng nó cung cấp cho lỗi # 1093

UPDATE `mentor2122017`.`users` SET language_id = 
    (SELECT GROUP_CONCAT(ul.language_id) FROM `mentor2122017`.`users` u 
    left join `mentor`.`user_language` ul ON u.id = ul.users_id 
    where 
    ul.language_id is not null GROUP by ul.users_id) 
Các vấn đề liên quan