Ver Mensaje Individual
  #6 (permalink)  
Antiguo 20/08/2013, 07:04
Avatar de gnzsoloyo
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 en campo con valores de la misma tabla

El uso de tablas temporales, incluyendo las TEMPORARY, que son un caso específico, está claramente explicado en el manual de referencia, a donde te remito para que las entiendas (http://dev.mysql.com/doc/refman/5.0/...ate-table.html).
La lógica es simple: Creas una tabla temporal donde recolectas los casos que vas a actualizar, con el mismo JOIN usado en la subconsulta (y pongo un JOIN explícito y no la basura implícita, porque es más efectivo y de mejor performance). De ese modo salteas la restricción sin necesidad de violar nada.
Por otro lado, como ya te dije, es una tarea innecesaria, porque el dato ya existe, y la tabla, aunque la hayas leído desde un Excel, debe estar forzosamente en una tabla física real de MySQL para intentar hacer cualquier operación en él.
de todos modos, hay un detalle adicional: Nunca, jamás, se cargan datos en una tabla fija de una base de datos, sin haberlos previamente depurado, y eso no lo estás haciendo...
¿A q ué me refiero?
A que si esa tabla se origina en un archivo de Excel, antes de pasarlo a MySQL deberías haber hecho la normalización de datos, insertando una columna dinámicamente, donde insertaras la FK que le correspondería por el valor de esa columna, el de la FK a que hará referencia, y eliminado luego esa columna de cadena de texto. Eso es lo que se hace en todos los casos, y es responsabilidad del desarrollador realizar esos procesos.
Yo he tenido múltiples veces casos semejantes, e incluso algunos donde de una tabla de Excel, o un archivo CSV, luego de depurarlo, obtenía los registros de 17 tablas diferentes. No es algo difícil de hacer, aunque lleva tiempo preparar la lógica.
Lo que no debes hcer, a menos que sea absolutamente necesario, es subir una tabla "cruda" a la base y luego pretender "normalizarla". Eso no se hace. En todo caso, como te propongo, lo que haces es crear tablas temporales donde realizar el proceso de normalización.

En cuanto a lo de redundancia innecesaria, me refiero a que no tiene ningún sentido poner en la tabla "clientes", el ID numérico del tipo de texto, si ya tienes la descripcion del mismo. Estás, en definitiva, repitiendo datos y destruyendo la estructura normalizada que debería existir en esa tabla.
¿Se entiende un poco mejor?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)