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

Update + select

Estas en el tema de Update + select en el foro de Mysql en Foros del Web. Muy buenas a todos, qué tal? Tenía una consulta que haceros. Estoy intentado mejorar un sistema de registro que tengo y tengo un problema. He ...
  #1 (permalink)  
Antiguo 11/05/2011, 04:15
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 773
Antigüedad: 18 años
Puntos: 15
Update + select

Muy buenas a todos, qué tal?

Tenía una consulta que haceros. Estoy intentado mejorar un sistema de registro que tengo y tengo un problema. He intentado hacer un UPDATE de un campo cuando en otra tabla tienen datos relacionados, el problema es que me da un error MySQL y por lo que pude leer en el manual en el SELECT no se puede hacer una consulta a la tabla que vas a actualizar, y no sabía como hacerlo de otra forma. Os dejo mi consulta:

Código:
UPDATE wp_lista SET lista_info_Id =(
	SELECT lista_info_id
	FROM wp_lista_info, wp_lista
	WHERE wp_lista.lista_nombreunico = wp_lista_info.lista_info_nombre
	ORDER BY wp_lista.lista_id ASC
);
El erro que me dice es:

ERROR 1093 (HY000): You can't specify target table 'wp_lista' for update in FROM clause

Alguna sugerencia?

Gracias
__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?
  #2 (permalink)  
Antiguo 11/05/2011, 05:42
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, 4 meses
Puntos: 2658
Respuesta: Update + select

Si lo traduces literalmente te darás cuenta del problema:
"Usted no puede especificar la tabla destino para actualizar "wp_lista" en la cláusula FROM."

Significa que no puedes leer y actualizar la misma tabla en la misma consulta (una subconsulta es siempre parte de la consulta mayor), porque el resultado del UPDATE podría alterar la lectura resultante, por lo que algunos registros podrían quedar en un estado indeterminado.
En realidad la cosa es mucho más simple (ver uso de UPDATE en manual de referencia):
Código MySQL:
Ver original
  1. UPDATE wp_lista, wp_lista_info
  2. SET wp_lista.lista_info_Id = wp_lista_info.lista_info_id
  3. WHERE wp_lista.lista_nombreunico = wp_lista_info.lista_info_nombre;
__________________
¿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/05/2011, 07:44
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 773
Antigüedad: 18 años
Puntos: 15
Respuesta: Update + select

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Si lo traduces literalmente te darás cuenta del problema:
"Usted no puede especificar la tabla destino para actualizar "wp_lista" en la cláusula FROM."

Significa que no puedes leer y actualizar la misma tabla en la misma consulta (una subconsulta es siempre parte de la consulta mayor), porque el resultado del UPDATE podría alterar la lectura resultante, por lo que algunos registros podrían quedar en un estado indeterminado.
En realidad la cosa es mucho más simple (ver uso de UPDATE en manual de referencia):
Código MySQL:
Ver original
  1. UPDATE wp_lista, wp_lista_info
  2. SET wp_lista.lista_info_Id = wp_lista_info.lista_info_id
  3. WHERE wp_lista.lista_nombreunico = wp_lista_info.lista_info_nombre;
Si, lo leí traducido y lo entendí pero no sabía que opción podía escoger para realizarlo. Pero viendo tu solución me siento idiota jajajaja

Probaré con ello y seguiré leyendo.

Muchas gracias
__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?

Etiquetas: select, update
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 17:38.