2010-01-28 16 views
7

de noche, todouna mesa de b donde (condiciones)

En realidad, es de noche. Sobre las 11 p.m. Mi cerebro se está apagando y necesito un poco de ayuda para poder terminar e irme a casa :)

Tengo dos tablas: la tabla a y la tabla b. Necesito actualizar un campo en la tabla a con el valor de un campo en la tabla b cuando coinciden otros dos campos. Las tablas no tienen un identificador único para cada registro :(

Básicamente, quiero hacer esto:

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 al menos ... creo que eso es lo que quiero hacer ...

puede alguien ayudarme, por favor

Respuesta

11

puede hacerlo a través de una combinación en la actualización:?

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

Usted, señor, es un genio. ... y estoy realmente cansado de no pensar en hacer una unión ... ¡Ahora puedo irme a casa y todo gracias a ti! Dése una palmadita en la espalda: D –

+0

@Cosmic: me alegro de que funcione para usted ... Tuve que comprobar que esto funcionaba, pasé demasiado tiempo dentro de LINQ últimamente :) –

+0

Creo que debe establecer un alias para 'a 'tabla para que esto funcione, o me falta algo? –

3

uso :

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

SQL Server no admite alias de tabla en la tabla que se actualiza, pero lo anterior es una consulta correlacionada - esos campos sin el alias de la tabla adjunta b servirá valores de TABLE_A porque no tiene una alias.

El único problema más allá de eso es si hay múltiples valores b.importantfield para registros con los registros coincidentes en TABLE_A. Uso:

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

..pero se debe utilizar un ORDER BY así o te conseguir cualquier valor aleatorio b.importantfield.

+0

Muchas gracias por tomarse el tiempo para escribirme una respuesta. Al final no utilicé tu solución, pero quiero agradecerte de todos modos. Así que gracias :) –

Cuestiones relacionadas