2009-11-17 15 views
76

Ho due tavoli ...aggiornare i valori colonne con colonna di un'altra tabella in base alle condizioni

table1 (id, oggetto, prezzo) Valori:

id | item | price 
------------- 
10 | book | 20 
20 | copy | 30 
30 | pen | 10 

.... table2 (id, voce, prezzo) valori:

id | item | price 
------------- 
10 | book | 20 
20 | book | 30 

Ora voglio:

update table1 
    set table1.Price = table2.price 
where table1.id = table2.id 
    and table1.item = table2.item. 

Come faccio?

+0

@mrp: non si dovrebbe mettere ogni RDBM come tag perché, qualcuno potrebbe consigliarvi qualche soluzione specifica del fornitore. – RageZ

risposta

124

Qualcosa del genere dovrebbe farlo:

UPDATE table1 
    SET table1.Price = table2.price 
    FROM table1 INNER JOIN table2 ON table1.id = table2.id 

Si può anche provare questo: prezzo aggiornamento table1 set = (select prezzo da table2 dove table1.id = table2.id);

+2

Mi dà un messaggio di errore: oggetto non valido table1. – niceApp

+0

Mi dà l'errore L'identificatore di più parti "table1.price" non può essere associato. – niceApp

+0

assicurati di non utilizzare 'Table1' ma' table1' MSSQL sembra essere case sensitive. – RageZ

61

Questo sarà sicuramente funzionerà:

UPDATE table1 
SET table1.price=(SELECT table2.price 
    FROM table2 
    WHERE table2.id=table1.id AND table2.item=table1.item); 
+1

ha funzionato per me! thanx –

+1

Ma questo sta aggiornando più no di righe :(di quanto non sia ... –

+0

Dovrebbe aggiornare solo il no delle righe restituite all'interno della query interna, ma raddoppiato il no di aggiornamento sta succedendo :( –

Problemi correlati