Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Update usando SubQuery (!)

Estas en el tema de Update usando SubQuery (!) en el foro de Mysql en Foros del Web. Tengo una base de datos donde llegan piezas con codigos como "38DD-156871-1Z obviamente a cada registro le asigno un ID diferente ahora el codigo del ...
  #1 (permalink)  
Antiguo 10/03/2013, 16:38
 
Fecha de Ingreso: abril-2010
Mensajes: 3
Antigüedad: 14 años
Puntos: 0
Exclamación Update usando SubQuery (!)

Tengo una base de datos donde llegan piezas con codigos como "38DD-156871-1Z obviamente a cada registro le asigno un ID diferente

ahora el codigo del medio es el que realmente identifica a la guia 156871 el inicio y el final puede variar dependiendo de las cajas tamanos y eso

Ingreso eso codigos en una tabla de mi base de datos mediante un modulo en php donde con una pistola lectora de codigo de barras a medida que va escaneando va generando nuevos inputs y al procesar me ingresa todos los paquetes a la tabla

Ahora por ejemplo si el numero del medio que es el que identifica a la guia se repite quiere decir que esa guia tiene 2, 3, 4, 5 o .....n cantidad de piezas pero sigue siendo la misma guia el mismo cliente,

Ahora estoy haciendo una consulta donde me cuenta la cantidad de piezas que tiene esa guia osea donde se repite el numero del medio en este caso 156871 por ejemplo esto funciona perfecto:

SELECT COUNT( * ) FROM guias_inventario WHERE nro_guia LIKE '%156871%'

si son 8 registros donde se repite ese numero al ejecutar esa consulta me devuelve el nro 8

Ahora quiero hacerle un UPDATE a cada registro donde el campo PIEZAS = 8 en este caso

UPDATE `guias_inventario`
SET `piezas` = '8'
WHERE `nro_guia` LIKE '%156871%'

esto tambien trabaja perfecto me hace UPDATE a todos lo registros donde cambiado el campo PIEZAS en 8 donde el campo NRO_GUIA contiene estos numeros 156871

Lo que quiero hacer es hacerlo automatico son el subquery inicial

SELECT COUNT( * ) FROM guias_inventario WHERE nro_guia LIKE '%156871%' este subquery me devuelve 8

UPDATE `guias_inventario`
SET `piezas` = '8' <----- // Quiero incluir aqui el subquery //
WHERE `nro_guia` LIKE '%156871%'

Quedaria algo asi:

UPDATE `guias_inventario`
SET `piezas` = (SELECT COUNT( * ) FROM guias_inventario WHERE nro_guia LIKE '%156871%')
WHERE `nro_guia` LIKE '%156871%'

pero si lo coloco asi me arroja este error

MySQL ha dicho:

#1093 - You can't specify target table 'guias_inventario' for update in FROM clause

Alguien sabe si es posible hacer esto en MySQL??
  #2 (permalink)  
Antiguo 10/03/2013, 16:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Update usando SubQuery (!)

Cita:
#1093 - You can't specify target table 'guias_inventario' for update in FROM clause
No puedes consulta y actualizar la misma tabla en la misma consulta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/03/2013, 08:14
 
Fecha de Ingreso: abril-2010
Mensajes: 3
Antigüedad: 14 años
Puntos: 0
De acuerdo Respuesta: Update usando SubQuery (!)

Gracias por la respuesta gnzsoloyo

Lo resolvi mediante php con dos bucle, un while dentro de otro while

El primer while recorre todos los registros de la tabla uno a uno y

'SELECT * FROM guias_inventario'

el otro while hace la consulta contando el nro de registros que tienen esa nro de guia

"SELECT COUNT( * ) as total_piezas FROM guias_inventario WHERE nro_guia LIKE '%".$n_guia."%'"

con el resultado hago el update del registro

"UPDATE `guias_inventario` SET `piezas` = '".$reg[total_piezas]."' WHERE `nro_guia` LIKE '%".$n_guia."%'"


Tema Cerrado

Etiquetas: subquery
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:42.