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

Error

Estas en el tema de Error en el foro de Mysql en Foros del Web. Buenas es que estoy tratando de pasar un consulta de SQL server a Mysql .... en SQL server me corre bien pero cuando voy a ...
  #1 (permalink)  
Antiguo 28/12/2010, 07:35
 
Fecha de Ingreso: noviembre-2009
Mensajes: 42
Antigüedad: 14 años, 5 meses
Puntos: 0
Pregunta Error

Buenas es que estoy tratando de pasar un consulta de SQL server a Mysql .... en SQL server me corre bien pero cuando voy a copiar y pegar la misma consulta en el phpmyadmin me genera un error

Código SQL:
Ver original
  1. SELECT ot.ordtracodigo, ot.ordtrafecgen, ot.plantacodigo,
  2. ot.sistemcodigo, ot.equipocodigo, ot.componcodigo, ot.tipmancodigo,
  3. ot.ordtradescri, ot.ordtrafecini, ot.ordtrahorini, ot.ordtrafecfin, ot.ordtrahorfin,
  4. ta.usuacodi, ta.tiptracodigo, ta.tareacodigo, ta.usutarcodigo, ta.prioricodigo,
  5. tb.otestacodigo, ot.tipfalcodigo, subzona.subzoncodigo, zona.zonacodigo,
  6. ot.solsercodigo FROM sistema INNER JOIN (SELECT     tareot.ordtracodigo,
  7. tareot.otestacodigo FROM tareot INNER JOIN (SELECT ordtracodigo,
  8. MAX(tareotsecuen) AS tareotsecuen FROM tareot WHERE (ordtracodigo IS NOT
  9. NULL) GROUP BY ordtracodigo) AS ta1 ON tareot.ordtracodigo = ta1.ordtracodigo
  10. AND tareot.tareotsecuen = ta1.tareotsecuen) AS tb INNER JOIN (SELECT    
  11. tareot.ordtracodigo, usuariotareot.usuacodi, tareot.tareacodigo,
  12. usuariotareot.usutarcodigo, tareot.tiptracodigo, tareot.prioricodigo FROM tareot
  13. INNER JOIN ot ON tareot.ordtracodigo = ot.ordtracodigo INNER JOIN
  14. usuariotareot ON tareot.tareotcodigo = usuariotareot.tareotcodigo WHERE
  15. (tareot.tareotsecuen = '0') AND (usuariotareot.usutarlider = '1')) AS ta ON
  16. tb.ordtracodigo = ta.ordtracodigo INNER JOIN ot ON ta.ordtracodigo =
  17. ot.ordtracodigo ON sistema.sistemcodigo = ot.sistemcodigo INNER JOIN subzona
  18. ON sistema.subzoncodigo = subzona.subzoncodigo INNER JOIN zona ON
  19. subzona.zonacodigo = zona.zonacodigo WHERE (NOT (tb.ordtracodigo
  20. IN(SELECT     ordtracodigo FROM reportot WHERE (reportcodigo IN (SELECT    
  21. reportcodigo FROM cierreot WHERE (ordtracodigo = tb.ordtracodigo))))))

Este es el error
Cita:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON sistema.sistemcodigo = ot.sistemcodigo INNER JOIN subzona ON sistema.subzonco' at line 18
Espero que me puedan colaborar ... Gracias
  #2 (permalink)  
Antiguo 28/12/2010, 09:41
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: Error

A veces es mejor usar algún software con parseo de sintaxis y escribir la sentencia en forma estructurada. De ese modo los errores se vuelven visibles. To te recomiendo usar MySQL Workbench, que puedes descargar de la página oficial.
En tu caso tenías un ON mal puesto en el INNER JOIN, y además mal cerrados los últimos paréntesis (muchos de los cuales eran innecesarios).
Quedaría mas o menos así:
Código MySQL:
Ver original
  1.     ot.ordtracodigo,
  2.     ot.ordtrafecgen,
  3.     ot.plantacodigo,
  4.     ot.sistemcodigo,
  5.     ot.equipocodigo,
  6.     ot.componcodigo,
  7.     ot.tipmancodigo,
  8.     ot.ordtradescri,
  9.     ot.ordtrafecini,
  10.     ot.ordtrahorini,
  11.     ot.ordtrafecfin,
  12.     ot.ordtrahorfin,
  13.     ta.usuacodi,
  14.     ta.tiptracodigo,
  15.     ta.tareacodigo,
  16.     ta.usutarcodigo,
  17.     ta.prioricodigo,
  18.     tb.otestacodigo,
  19.     ot.tipfalcodigo,
  20.     subzona.subzoncodigo,
  21.     zona.zonacodigo,
  22.     ot.solsercodigo
  23.   sistema INNER JOIN
  24.     (SELECT
  25.         tareot.ordtracodigo,
  26.         tareot.otestacodigo
  27.     FROM
  28.         tareot INNER JOIN
  29.           (SELECT
  30.               ordtracodigo,
  31.               MAX(tareotsecuen) AS tareotsecuen
  32.           FROM tareot
  33.           WHERE
  34.               (ordtracodigo IS NOT NULL)
  35.           GROUP BY ordtracodigo) AS ta1
  36.           ON tareot.ordtracodigo = ta1.ordtracodigo AND tareot.tareotsecuen = ta1.tareotsecuen
  37.     ) AS tb INNER JOIN
  38.     (SELECT
  39.         tareot.ordtracodigo,
  40.         usuariotareot.usuacodi,
  41.         tareot.tareacodigo,
  42.         usuariotareot.usutarcodigo,
  43.         tareot.tiptracodigo,
  44.         tareot.prioricodigo
  45.     FROM
  46.         tareot
  47.         INNER JOIN ot ON tareot.ordtracodigo = ot.ordtracodigo
  48.         INNER JOIN usuariotareot ON tareot.tareotcodigo = usuariotareot.tareotcodigo
  49.      WHERE
  50.          (tareot.tareotsecuen = '0' AND usuariotareot.usutarlider = '1')
  51.      ) AS ta ON tb.ordtracodigo = ta.ordtracodigo
  52.      INNER JOIN ot ON ta.ordtracodigo = ot.ordtracodigo AND sistema.sistemcodigo = ot.sistemcodigo
  53.      INNER JOIN subzona ON sistema.subzoncodigo = subzona.subzoncodigo
  54.      INNER JOIN zona ON subzona.zonacodigo = zona.zonacodigo
  55. WHERE NOT tb.ordtracodigo IN
  56.     (SELECT ordtracodigo
  57.     FROM reportot
  58.     WHERE reportcodigo IN
  59.         (SELECT reportcodigo FROM cierreot WHERE ordtracodigo = tb.ordtracodigo
  60.         )
  61.     );
__________________
¿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 28/12/2010, 15:16
 
Fecha de Ingreso: noviembre-2009
Mensajes: 42
Antigüedad: 14 años, 5 meses
Puntos: 0
Pregunta Respuesta: Error

Huy gracias por la herramienta !!! :D muy buena.... pero ahora no me esta arrojando ningún error .... se queda cargando y no me bota nada !!! alguna idea ??
  #4 (permalink)  
Antiguo 28/12/2010, 16:09
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: Error

Es posible que la consulta no sea óptima para los algoritmos de MySQL, o bien que el servidor no esté suficientemente optimizado.
Una forma de saberlo es mandarla a ejecutar con el Workbench y luego abrir otra conexión y revisar las conexiones la server. La lista de conexiones mostrará qué es lo que está haciendo MySQL realmente.
También puedes usar
Código MySQL:
Ver original
  1. EXPLAIN consulta
, donde consulta es la consulta que deseas ejecutar. Este comando te devolverá una tabla de análisis de lo que MySQL hace y puede permitirte encontrar los cuellos de botella de la consulta.
Para comprender el significado del reporte generado por EXPLAIN es mejor recurrir al manual: 7.2.1. Sintaxis de EXPLAIN (Obtener información acerca de un SELECT)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 28/12/2010, 16:09
 
Fecha de Ingreso: noviembre-2009
Mensajes: 42
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Error

viejo gnzsoloyo, es que creo que el error esta en la linea 54 del code que ud posteo ... hay no va un AND sino otro INNER JOIN (me vase en esto http://luauf.com/2008/05/11/multiple...sql-vs-ms-sql/ para deducirlo)

pero entonces como le agrego el otro INNER JOIN
  #6 (permalink)  
Antiguo 28/12/2010, 16:52
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: Error

No, mi estimado Ang3r, corresponde usar AND y no ON si ambas condiciones contienen al menos un campo de una de las dos tablas implicadas en el INNER JOIN, o bien si provienen de la tabla derivada, y en este caso ot.ordtracodigo y ot.sistemcodigo provienen de la segunda tabla (ot) de ese mismo INNER JOIN.

Postdata: Yo me basé en la experiencia adquirida.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
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 07:42.