2010-01-28 13 views
7

Evening all,Tabella di aggiornamento a dalla tabella b dove (condizioni)

In realtà, è notte. Verso le 23:00. Il mio cervello si sta spegnendo e ho bisogno di un po 'di aiuto per poter finire e andare a casa :)

Ho due tabelle - tabella ae tabella b. Ho bisogno di aggiornare un campo nella tabella a con il valore di un campo nella tabella b quando due altri campi corrispondono. Le tabelle non hanno un ID univoco per ogni record :(

Fondamentalmente, io voglio fare questo:

update a 
set importantField = 
(select b.importantfield 
from b 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 
) 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 

O almeno ... penso che è quello che voglio fare ...

qualcuno può darmi una mano, si prega di

risposta

11

È possibile farlo tramite un join nell'aggiornamento:?

Update a 
Set a.importantField = b.importantField 
From a Join b 
    On a.matchfield = b.matchfield 
    And a.matchfield2 = b.matchfield2 
+1

Tu, signore, sei un genio. ... e sono davvero stanco di non pensare di fare un join ... Ora posso andare a casa ed è tutto grazie a voi! Datti una pacca sulla spalla: D –

+0

@Cosmic: Sono contento che funzioni per te ... Ho dovuto controllare che funzionasse, ho passato troppo tempo all'interno di LINQ ultimamente :) –

+0

Penso che sia necessario impostare un alias per 'a 'tavolo in modo che funzioni, o mi manca qualcosa? –

3

Usa :

UPDATE TABLE_A 
    SET importantField = (SELECT b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

SQL Server non supporta gli alias di tabella sul tavolo in fase di aggiornamento, ma quanto sopra è una query correlata - quei campi senza la tabella alias b allegata servirà valori da TABLE_A perché non ha un alias.

L'unico problema è se ci sono più valori b.importantfield per i record con i record corrispondenti su TABLE_A. Usa:

UPDATE TABLE_A 
    SET importantField = (SELECT TOP 1 
           b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

..ma si dovrebbe utilizzare un ORDER BY così o ti ottenere qualsiasi valore casuale b.importantfield.

+0

Grazie mille per aver trovato il tempo di scrivermi una risposta. Alla fine non ho usato la tua soluzione, ma voglio ringraziarti comunque. Quindi grazie :) –

Problemi correlati