PDA

Ver la Versión Completa : UPDATE con SELECT como???


advancexz
16-03-2009, 21:22:16
[EDIT] ups me equivoqué en el título, debió ser así "UPDATE CON SELECT como???"[EDIT]

Trato de actualizar un campo de una tabla con un campo de otra tabla, pero el rollo lo quiero hacer masivo, primero intente hacerlo asi:

UPDATE codigos SET nombreING = ( SELECT temp.nombreING
FROM codigos_TEMP temp
JOIN codigos c on c.codigo = temp.codigo)

luego me mando error de que la tabla a actualizar no podía formar parte del SELECT y entonces le hice una copia a mi tabla fuente (de donde voy a sacar los datos) y quedo así:

UPDATE codigos SET nombreING = ( SELECT temp.nombreING
FROM codigos_TEMP temp
JOIN codigos_copy c on c.codigo = temp.codigo)

pero ahora me marca error de que el subquery me arrojará más de un registro, pero es exactamente lo que quiero hacer, que todos los que me traiga los actualice, no solo uno.

bueno ahi esta mi problema, como hacer ese update masivo...
de antemano gracias.

droguerman
16-03-2009, 23:41:39
Supongo que estás usando MySQL de no ser así prueba esto

UPDATE codigos SET nombreING =T.codigo
FROM
( SELECT temp.codigo, temp.nombreING
FROM codigos_TEMP temp
JOIN codigos c on c.codigo = temp.codigo)[/B] T
WHERE codigos.codigo = T.codigo;



ahora modificando tu solución puedes intentar esto

UPDATE codigos SET nombreING = ( SELECT temp.nombreING
FROM codigos_TEMP temp
JOIN codigos c on c.codigo = temp.codigo
AND temp.codigo = codigos.codigo
LIMIT 1)

roman
17-03-2009, 00:56:41
pero ahora me marca error de que el subquery me arrojará más de un registro, pero es exactamente lo que quiero hacer, que todos los que me traiga los actualice, no solo uno.

Este error no se refiere al total de registros que vas a actualizar, sino a que, durante la ejecución de la consulta, el motor encontró un registro de la tabla que se actualiza, para el cual hay varios registros de la subconsulta.

A mi me parece que esto te sucede por que la subconsulta no debe usar un join sino un where.

De todas formas, esto también lo puedes hacer sin subconsultas:


update codigos
left join codigos_temp on codigos_temp.codigo = codigos.codigo
set codigos.codigo = codigos_temp.codigo
where codigos_temp.codigo is not null


// Saludos

advancexz
17-03-2009, 01:11:33
efectivamente estoy usando mysql

gracias por las respuestas las voy a checar en un rato mas...

celades1
17-03-2009, 12:13:50
Hola

No hace falta el join ya que el where ya hace esa funcion en la subquery
y luego el where final es para evitar que haga update en el caso de que el
codigo no exista en la tabla codigos_temp



Código SQL [-] (http://www.clubdelphi.com/foros/#)
UPDATE codigos c SET c.nombreING = ( SELECT temp.nombreING
FROM codigos_TEMP temp
where c.codigo = temp.codigo)
where exists( select null from codigos_TEMP where codigo=c.codigo)






Saludos