web-dev-qa-db-fra.com

Mise à jour SQL d'une colonne d'une autre colonne dans une autre table

J'ai lu divers articles avant cela. mais aucun d'eux ne semblait fonctionner pour moi.

Comme le titre le suggère, j'essaie de mettre à jour une colonne à partir d'une colonne d'un autre tableau. Je ne me souviens pas avoir eu de problèmes avec ça avant ..

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

2. Auparavant, les contacts étaient liés aux comptes d'utilisateurs via l'ID de compte. Cependant, nous voulons maintenant associer un contact à user_settings via contacts.id

Voici quelques exemples de ce que j'ai essayé, mais aucun n'a fonctionné. Je serais intéressé par A.) Pourquoi ils ne fonctionnent pas et B.) Que dois-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 )

J'ai l'impression que mon cerveau s'est arrêté sur moi et j'apprécierais tout choc pour le redémarrer. Merci :)

19
Kenny Cason

Selon la documentation MySQL, pour faire une mise à jour de table croisée, vous ne pouvez pas utiliser une jointure (comme dans d'autres bases de données), mais utilisez plutôt une clause where:

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

Je pense que quelque chose comme ça devrait fonctionner:

UPDATE User_Settings, Contacts
    SET User_Settings.Contact_ID = Contacts.ID
    WHERE User_Settings.Account_ID = Contacts.Account_ID
38
FlySwat
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
0
Rajesh C