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

Too many tables MySQL can only use 61 tables in a join

Estas en el tema de Too many tables MySQL can only use 61 tables in a join en el foro de Mysql en Foros del Web. Buenos dias Foreros Explico mi consulta. Tengo la necesidad de crear una consulta donde tengo que mostrar un resultado de una información uniendo diferentes tablas. ...
  #1 (permalink)  
Antiguo 04/03/2014, 06:24
 
Fecha de Ingreso: diciembre-2012
Mensajes: 11
Antigüedad: 12 años
Puntos: 0
Too many tables MySQL can only use 61 tables in a join

Buenos dias Foreros

Explico mi consulta.

Tengo la necesidad de crear una consulta donde tengo que mostrar un resultado de una información uniendo diferentes tablas. a continuación un ejemplo de la quey que le hago al MYSQL:

Código MySQL:
Ver original
  1.     a2.columna_en_a2    as "Nombre de la columna en a2",
  2.     a1.uid              as "User ID"
  3.     users                   as a1
  4.     left join node          as a2   on a1.uid = a2.uid
  5.     a2.columna_en_a2          between "2010-01-01 00:00:00.0" and "2014-02-28 00:00:00.0"
  6.    
  7. order by a2.columna_en_a2 desc

Hasta aqui todo bien, es decir no tengo inconvenientes. el problema es que tengo que unir 140 tablas y MYSQL cuando uno mas de 61 me lanza el error que no puedo unir mas de 61 tablas (Error Code: 1116. Too many tables; MySQL can only use 61 tables in a join).

Se me ha ocurrido, separar toda la consulta en tres select, mi pregunta es: Como hacer para unir los tres select y que los resultados se muestren con columnas contiguas?.

Es decir

| Columnas_script1 | Columnas_script2 | Columnas_script3


Espero haya podido explicarme bien.

Gracias.
  #2 (permalink)  
Antiguo 04/03/2014, 06:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Too many tables MySQL can only use 61 tables in a join

Por lo pronto, hacer un JOIN con 140 tablas es una insensatez, si pretender ofender, porque de entrada asesinarás la performance y la capacidad del motor para responderte.
Resulta francamente difícil entender en qué contexto de qué sistema comercial (y conozco algunos muy grandes) puede necesitarse crear un JOIn de semejantes características.
Ahora bien, aclaremos que no es impensable tener que hacer una operación que deba tomar datos de 140 tablas (creo que en nuestros sistemas hay algunos casos peores), pero lo que seguro no se hace es hacer un único JOIN con esa cantidad de niveles.
Yo te sugeriría que primero nos dieras una idea de por qué llegas a tener que usar 140 tablas, como para visualziar cuál es el problema que origina una necesidad desmedida.
Por otro lado, como es imposible hacer una query semejante, la solución a nivel práctico pasa por transformar algunas partes del JOIN único en subconsultas, otras partes en vistas (VIEW), y otras en tablas temporary y volcar todo en un stored procedure.

Pero empieza por explicarnos de dónde salen y por qué llegas a necesitar una query con 140 tablas...
__________________
¿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 04/03/2014, 07:42
 
Fecha de Ingreso: diciembre-2012
Mensajes: 11
Antigüedad: 12 años
Puntos: 0
Respuesta: Too many tables MySQL can only use 61 tables in a join

Gracias gnzsoloyo por tu comentario.

Te explico. Tenemos la necesidad de exportar datos de los registros que tenemos en nuestra base de datos.

Las 140 tablas tienen la información de nuestros registros. Nuestra trabaja principal se llama "registro" la cual tiene solo el ID_registro, Name_registro, Fecha_registro. el resto de la 130 tablas tienen información que se relacionan con la tabla "registro". Uso el Join para que me muestre los valores de las columnas que me interesa exportar de cada tabla donde el campo ID_registro de cada tabla sea igual al ID_registro de mi tabla "Registro".

Esta base de datos es llenada por un formulario que tenemos en una APP donde según el usuario que usa el APP, el sistema muestra un formulario con los datos que el usuario necesita para hacer el registro.

Nota: Ciertamente no todas las tablas se usan en el formulario de cada usuario.

Por tal razón necesitamos que en nuestra exportacion de informacion esten todas las columnas que nos interesa mostrar en cada tabla de cada registro, es logico que habran datos en las columanas con valores nulos porque no todas las tablas se usan en cada registro.

gracias por tu ayuda..
  #4 (permalink)  
Antiguo 04/03/2014, 14:24
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 14 años, 1 mes
Puntos: 32
Respuesta: Too many tables MySQL can only use 61 tables in a join

Hola:

Si las tablas solamente se relacionan con "registro" y no entre sí, no necesitas hacer el join con todas a la vez en la misma consulta.
Hay alguna razón para no hacer 140 consultas donde cada consulta es un join de registro con una de esas tablas ????

slds;

nup_
  #5 (permalink)  
Antiguo 06/03/2014, 07:00
 
Fecha de Ingreso: diciembre-2012
Mensajes: 11
Antigüedad: 12 años
Puntos: 0
Respuesta: Too many tables MySQL can only use 61 tables in a join

Hola nup_

Gracias por contestar.

Código PHP:
Ver original
  1. from
  2.     registro        as a1
  3.     join usuario    as a2   on a1.uid = a2.uid
  4.     join tabla1     as a3   on a1.rid = a3.entidad
  5.     join tabla2     as a4   on a1.rid = a4.entidad
  6.     .
  7.     .
  8.     .
  9.     .
  10.     join tablan as an   on a1.rid = an.entidad

de esta manera relaciono todas las tables con mi tabla registro. El problema de hacer 140 select es que luego tengo que mostrar esos 140 Select en una misma tabla con todo los registros de mi tabla principal ("registro")
  #6 (permalink)  
Antiguo 06/03/2014, 11:46
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 14 años, 1 mes
Puntos: 32
Respuesta: Too many tables MySQL can only use 61 tables in a join

Hola:

Puedes resolver ese problema con el lenguaje de programación (PHP,Java,..) con q estés haciendo las consultas. Simplemente divide la consulta en 3 select y recorre los 3 resultados a la misma vez para conformar tu tabla final. Se va a demorar lo mismo q si tienes un solo resultado.

Si quieres resolver el problema desde mysql lo q se me ocurre es dividir tu consulta en 3 selects, guardar el resultado de cada select en una tabla temporal y después hacer joins entre las 3 tablas temporales. No lo he probado pero debe funcionar. El rendimiento va a ser peor del q tienes ya q estás añadiendo más joins para obtener el resultado.

Personalmente pienso q la mejor forma es resolver el problema desde tu lenguaje de programación.

slds;

nup_

Etiquetas: join, select, sql, tabla, tables
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 02:05.