2010-09-29 30 views
19

He leído varias publicaciones antes de esto. pero ninguno de ellos parecía funcionar para mí.SQL actualiza una columna de otra columna en otra tabla

Como sugiere el título, estoy tratando de actualizar una columna de una columna en otra tabla. No recuerdo haber tenido problemas con esto antes ..

1. Tabla: user_settings.contact_id, quiero actualizar con contacts.id where (user_settings.account_id == contacts_account_id)

2. Anteriormente Contactos estaban vinculados a las cuentas de usuario a través del account_id. Sin embargo, ahora queremos vincular un contacto al user_settings a través de contacts.id

A continuación se muestran algunos ejemplos de lo que he intentado, aunque ninguno de ellos ha funcionado. Me interesaría A.) Por qué no funcionan y B.) Qué debería hacer en su lugar.

Ejemplo 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 

Ejemplo 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 

Ejemplo 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) 

Siento como si mi cerebro simplemente apagado en mí y apreciaría cualquier bulto que reiniciar eso. Gracias :)

+2

puede alguien decir a mi por qué esto quedó rechazada por lo que puedo evitarlo en el futuro? –

Respuesta

38

De acuerdo con la documentación de MySQL, para hacer una actualización de la tabla cruzada, no se puede utilizar una combinación (como en otras bases de datos), pero en lugar de utilizar una cláusula donde:

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

I pensar algo como esto debería funcionar:

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

Gracias Definitivamente confundo mis bases de datos. Tan pronto como escribiste, los engranajes empezaron a agitarse. –

+0

su respuesta fue exactamente lo que estaba buscando. si cambia los nombres de las tablas y columnas para que coincidan con los míos, puede hacer que la respuesta responda mejor a la pregunta. ¡Gracias de nuevo! –

+0

He actualizado la respuesta para que coincida con los nombres exactos de la tabla. – 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 
Cuestiones relacionadas