Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-03-2009
advancexz advancexz is offline
Miembro
 
Registrado: jun 2008
Posts: 38
Poder: 0
advancexz Va por buen camino
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.

Última edición por advancexz fecha: 16-03-2009 a las 21:51:17.
Responder Con Cita
  #2  
Antiguo 16-03-2009
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
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)
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 17-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por advancexz Ver Mensaje
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
Responder Con Cita
  #4  
Antiguo 17-03-2009
advancexz advancexz is offline
Miembro
 
Registrado: jun 2008
Posts: 38
Poder: 0
advancexz Va por buen camino
efectivamente estoy usando mysql

gracias por las respuestas las voy a checar en un rato mas...
Responder Con Cita
  #5  
Antiguo 17-03-2009
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
transacciones y select for update tksko MySQL 1 17-12-2008 16:50:22
Select bloquea update luis1980 MySQL 2 22-09-2008 12:51:04
Update Select JAI_ME Varios 2 18-07-2008 23:36:15
Como hacer un Select, Insert, Update, Delete en SQL Server BlueSteel MS SQL Server 11 19-07-2007 10:02:42
Un select y update en una misma instruccion dmagui SQL 2 06-07-2005 17:17:49


La franja horaria es GMT +2. Ahora son las 01:39:32.


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
Copyright 1996-2007 Club Delphi