2010-09-29 46 views
19

Tôi đọc các bài đăng khác nhau trước đó. nhưng không ai trong số họ dường như làm việc cho tôi.SQL cập nhật một cột từ một cột khác trong một bảng khác

Khi tiêu đề đề xuất, tôi đang cố cập nhật một cột từ cột trong bảng khác. Tôi không nhớ gặp vấn đề với điều này trước khi ..

1. Bảng: user_settings.contact_id, tôi muốn cập nhật với contacts.id where (user_settings.account_id == contacts_account_id)

2. Trước đây hệ được liên kết với tài khoản người dùng thông qua account_id. Tuy nhiên, bây giờ chúng tôi muốn liên kết một liên hệ với user_settings qua contacts.id

Dưới đây là một vài ví dụ về những gì tôi đã thử, mặc dù không có ai trong số họ đã làm việc. Tôi sẽ quan tâm đến A.) Tại sao họ không làm việc và B.) Tôi nên làm gì thay vào đó.

Ví dụ A:

UPDATE user_settings 
SET user_settings.contact_id = contacts.id 
FROM user_settings 
INNER JOIN contacts ON user_settings.account_id = contacts.account_id 

Ví dụ B:

UPDATE (SELECT A.contact_id id1, B.id id2 
    FROM user_settings A, contacts B 
    WHERE user_settings.account_id = contacts.account_id) 
SET id1 = id2 

Ví dụ C:

UPDATE user_settings 
SET user_settings.contact_id = (SELECT id 
    FROM contacts 
    WHERE (user_settings.account_id = contacts.account_id) 
WHERE EXISTS (user_settings.account_id = contacts.account_id) 

tôi cảm thấy như bộ não của tôi chỉ tắt máy vào tôi và sẽ đánh giá cao bất kỳ va chạm để khởi động lại nó. Cảm ơn :)

+2

ai đó có thể nói với tôi tại sao điều này đã bình chọn xuống vì vậy tôi có thể tránh nó trong tương lai? –

Trả lời

38

Theo tài liệu MySQL, để làm một bản cập nhật bảng chéo, bạn có thể không sử dụng một tham gia (như trong cơ sở dữ liệu khác), nhưng thay vì sử dụng một mệnh đề where:

http://dev.mysql.com/doc/refman/5.0/en/update.html

tôi nghĩ một cái gì đó như thế này nên làm việc:

UPDATE User_Settings, Contacts 
    SET User_Settings.Contact_ID = Contacts.ID 
    WHERE User_Settings.Account_ID = Contacts.Account_ID 
+0

Cảm ơn tôi chắc chắn chỉ trộn lẫn cơ sở dữ liệu của mình. Ngay sau khi bạn gõ rằng bánh răng bắt đầu khuấy động. –

+0

câu trả lời của bạn chính xác là những gì tôi đang tìm kiếm. nếu bạn thay đổi tên bảng và cột để khớp với tên của tôi, nó có thể làm cho câu trả lời phù hợp hơn với câu hỏi. Cảm ơn một lần nữa! –

+0

Tôi đã cập nhật câu trả lời cho phù hợp với tên bảng chính xác của bạn. – FlySwat

0
Update tabelName Set SanctionLoad=SanctionLoad Where ConnectionId=ConnectionID 
go 
update tabelName Set meterreading=meterreading where connectionid=connectionid 
go 
update tabelName set customername=setcustomername where customerid=customerid 
Các vấn đề liên quan