web-dev-qa-db-fra.com

Mise à jour avec deux tables?

J'essaie de mettre à jour la table A avec les données de la table B. Je pensais pouvoir le faire quelque chose comme:

 UPDATE A
 SET A.name = B.name
 WHERE A.id = B.id

mais hélas, cela ne fonctionne pas.

Quelqu'un a une idée de comment je peux faire ça?

40
Nasir

Votre requête ne fonctionne pas car vous n'avez pas de clauseFROMqui spécifie les tables que vous aliasez via A/B.

S'il vous plaît essayez d'utiliser ce qui suit:

UPDATE A
    SET A.NAME = B.NAME
FROM TableNameA A, TableNameB B
WHERE A.ID = B.ID

Personnellement, je préfère utiliser une syntaxe de jointure plus explicite pour plus de clarté, c.-à-d.

UPDATE A
    SET A.NAME = B.NAME
FROM TableNameA A
    INNER JOIN TableName B ON 
        A.ID = B.ID
69
John Sansom

Pour Microsoft Access (ne pas rire!) ...

UPDATE TableA A
    INNER JOIN TableB B
    ON A.ID = B.ID
SET A.Name = B.Name
16
Nicolas

Je me grattais la tête, ne parvenant pas à obtenir le travail de syntaxe Join de John Sansom, du moins dans MySQL 5.5.30 InnoDB.

Il s'avère que cela ne fonctionne pas.

UPDATE A 
    SET A.x = 1
FROM A INNER JOIN B 
        ON A.name = B.name
WHERE A.x <> B.x

Mais cela fonctionne:

UPDATE A INNER JOIN B 
    ON A.name = B.name
SET A.x = 1
WHERE A.x <> B.x
8
gus

Les réponses n'ont pas fonctionné pour moi avec postgresql 9.1+

C’est ce que j’avais à faire (vous pouvez en savoir plus dans le manuel ici )

UPDATE schema.TableA as A
SET "columnA" = "B"."columnB"
FROM schema.TableB as B
WHERE A.id = B.id;

Vous pouvez omettre le schéma si vous utilisez le schéma par défaut pour les deux tables.

0
tupan