2009-07-01 17 views
36

Sto cercando di aggiornare la tabella A con i dati dalla tabella B. Ho pensato che avrei potuto fare qualcosa di simile a :Aggiornamento con due tabelle?

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

ma, ahimè, questo non funziona.

Qualcuno ha un'idea di come posso farlo?

risposta

62

La tua query non funziona perché non hai una clausola FROM che specifica le tabelle che stai facendo aliasing tramite A/B.

Si prega di provare a utilizzare il seguente: (! Non ridete)

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

Personalmente preferisco usare più esplicito join sintassi per chiarezza cioè

UPDATE A 
    SET A.NAME = B.NAME 
FROM TableNameA A 
    INNER JOIN TableName B ON 
     A.ID = B.ID 
+2

non so se si può avere l'alias per nella clausola SET. Potrebbe dipendere dal tuo sapore di SQL, ma credo che dal momento che è un dato che stai aggiornando "A" che non è consentito. –

14

Per Microsoft Access ...

UPDATE TableA A 
    INNER JOIN TableB B 
    ON A.ID = B.ID 
SET A.Name = B.Name 
+0

La risposta selezionata non ha funzionato per me su MariaDB. Questo ha fatto. Grazie ! –

5

Mi stavo grattando la testa, non riuscendo a ottenere il lavoro di sintassi Join di John Sansom, almeno in MySQL 5.5.30 InnoDB.

Si scopre che questo non funziona.

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

Ma questo funziona:

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

Quanto sopra è SQL-Server, non MySQL? – christiandev

Problemi correlati