Mettre à jour une colonne depuis une autre colonne dans une autre table

j'ai lu les différents post du avant cette. mais aucun d'eux ne semblait fonctionner pour moi.

comme le titre l'indique, j'essaie de mettre à jour une colonne d'une colonne d'une autre table. Je ne me souviens pas avoir eu de problèmes avec ça avant..

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

2. auparavant, les Contacts étaient liés aux comptes utilisateurs via account_id. Cependant, nous voulons maintenant relier un contact user_settings par 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 devrais-je faire à la place.

Exemple:

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 vient de s'arrêter et j'apprécierais toutes les bosses pour le redémarrer. Merci :)

19
demandé sur linuxbuild 2010-09-29 07:25:40

2 réponses

selon la documentation MySQL, pour faire une mise à jour de table croisée, vous ne pouvez pas utiliser une jointure (comme dans les 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 cela devrait fonctionner:

UPDATE User_Settings, Contacts
    SET User_Settings.Contact_ID = Contacts.ID
    WHERE User_Settings.Account_ID = Contacts.Account_ID
38
répondu FlySwat 2010-09-29 03:44:21
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
répondu Rajesh C 2013-06-02 09:57:53