Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/07/2010, 05:21
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: traducci'on query MS Access -> MySQL no funciona

Probemos:
Código MySQL:
Ver original
  1. UPDATE tablaA a
  2.     INNER JOIN (SELECT * FROM tablaB WHERE NOT Updated) ON a.`Client Login`=b.`loginName`
  3.     INNER JOIN tablaC c ON (b.Alias=c.Alias AND b.TempRepDate=c.PlayDate)
  4. SET b.campo = 0+((b.Originalcampo-0)*(1-0));

o bien:

Código MySQL:
Ver original
  1. UPDATE tablaA a
  2.     INNER JOIN tablaB b ON a.`Client Login`=b.`loginName`
  3.     INNER JOIN tablaC c ON (b.Alias=c.Alias AND b.TempRepDate=c.PlayDate)
  4. SET b.campo = 0+((b.Originalcampo-0)*(1-0))
  5. WHERE NOT Updated;

Por lo pronto, habías puesto dos veces esta condición:
Código MySQL:
Ver original
  1. ON a.`Client Login`=b.`loginName`
Por otro, en MySQL, las condiciones del INNER JOIN se deben poner a continuación de cada INNER JOIN y no todas al final. Le facilita el parseo.
Además, Si ya tienes una condición de filtrado aplicable sobre una única tabla, es mejor resolverla sobre una subconsulta, ya que abrevia el tiempo de respuesta, especialmente si es una condición de alta selectividad. No te olvides que el WHERE es el último en ser evaluado por lo que para ese momento has debido leer toda la tabla B inútilmente.

En cualquier caso lo que te conviene es ir construyendo la sentencia parte a parte, para asegurarte qué JOIN o qué condición es la que produce mayor retraso; habitualmente esa será la condición o JOIN que tenga muy baja selectividad, o bien donde sea conveniente definir índices.

El WHERE NOT Updated lo pongo de esa forma porque si es un booleano, la negación del FALSE devuelve TRUE, que es igual a lo que pones, pero más eficiente porque no hace comparaciones entre dos valores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)