2010-09-29 14 views
19

J'ai lu divers articles avant cela. mais aucun d'eux ne semblait fonctionner pour moi.Mise à jour SQL d'une colonne d'une autre colonne d'une autre table

Comme le titre le suggère, j'essaie de mettre à jour une colonne d'une colonne d'une autre table. Je ne me souviens pas d'avoir des problèmes avec cela avant ..

1. Tableau: user_settings.contact_id, je veux mettre à jour avec contacts.id where (user_settings.account_id == contacts_account_id)

2. Auparavant contacts ont été liés à des comptes d'utilisateurs via le compte_id. Cependant, maintenant nous voulons lier un contact à user_settings via contacts.id

Voici quelques exemples de ce que j'ai essayé, mais aucun d'entre eux n'a fonctionné. Je serais intéressé par A.) Pourquoi ils ne fonctionnent pas et B.) Que devrais-je faire à la place.

Exemple 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 

Exemple 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 

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

Je me sens comme mon cerveau juste arrêt sur moi et apprécierais toutes les bosses de redémarrage il. Merci :)

+2

quelqu'un peut-il dire à mon pourquoi cela a voté contre je peux l'éviter à l'avenir? –

Répondre

38

Selon la documentation MySQL, de faire une mise à jour de table croix, vous ne pouvez pas utiliser une jointure (comme dans d'autres bases de données), mais au lieu d'utiliser une clause where:

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

I penser quelque chose comme cela devrait fonctionner:

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

Merci, je viens juste de mélanger mes bases de données. Dès que vous avez tapé que les vitesses ont commencé à baratter. –

+0

votre réponse était exactement ce que je cherchais. Si vous modifiez les noms des tables et des colonnes pour qu'ils correspondent à ceux de la mienne, la réponse peut mieux correspondre à la question. Merci encore! –

+0

J'ai mis à jour la réponse pour correspondre exactement à vos noms de tables. – 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