Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   UPDATE con SELECT como??? (https://www.clubdelphi.com/foros/showthread.php?t=64083)

advancexz 16-03-2009 21:22:16

UPDATE con SELECT como???
 
[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
Código SQL [-]
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
Código SQL [-]
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

Cita:

Empezado por advancexz (Mensaje 341604)
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:

Código SQL [-]
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 [-]
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


La franja horaria es GMT +2. Ahora son las 12:14:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi