2009-07-01 44 views
36

Tôi cố gắng để cập nhật bảng A với dữ liệu từ bảng B. Tôi nghĩ tôi có thể làm cái gì đó như:Cập nhật với hai bảng?

UPDATE A 
SET A.name = B.name 
WHERE A.id = B.id 

nhưng than ôi, điều này không làm việc.

Bất kỳ ai có ý tưởng về cách tôi có thể thực hiện việc này?

Trả lời

62

Truy vấn của bạn không hoạt động vì bạn không có điều khoản FROM chỉ định các bảng mà bạn đang đặt bí danh qua A/B.

hãy thử sử dụng như sau: (! Đừng cười)

UPDATE A 
    SET A.NAME = B.NAME 
FROM TableNameA A, TableNameB B 
WHERE A.ID = B.ID 

Cá nhân tôi thích sử dụng rõ ràng hơn tham gia cú pháp cho rõ ràng tức là

UPDATE A 
    SET A.NAME = B.NAME 
FROM TableNameA A 
    INNER JOIN TableName B ON 
     A.ID = B.ID 
+2

Tôi không biết nếu bạn có thể có bí danh cho trong mệnh đề SET. Có thể phụ thuộc vào hương vị của SQL, nhưng tôi tin rằng vì nó được cho là bạn đang cập nhật "A" mà nó không được phép. –

14

Đối với Microsoft Access ...

UPDATE TableA A 
    INNER JOIN TableB B 
    ON A.ID = B.ID 
SET A.Name = B.Name 
+0

Câu trả lời đã chọn không hoạt động đối với tôi trên MariaDB. Điều này đã làm. Cảm ơn ! –

5

Tôi đã gãi đầu, không thể lấy cú pháp Tham gia của John Sansom, ít nhất là trong MySQL 5.5.30 InnoDB.

Nó chỉ ra rằng điều này không hoạt động.

UPDATE A 
    SET A.x = 1 
FROM A INNER JOIN B 
     ON A.name = B.name 
WHERE A.x <> B.x 

Nhưng công trình này:

UPDATE A INNER JOIN B 
    ON A.name = B.name 
SET A.x = 1 
WHERE A.x <> B.x 
+2

Ở trên là SQL-Server, không phải MySQL? – christiandev

Các vấn đề liên quan