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

Problema con INNER JOIN

Estas en el tema de Problema con INNER JOIN en el foro de Mysql en Foros del Web. Hola a todos, tengo tres tablas. Código: gestiones | afiliados | empresa id_gestion id_afiliado id_empresa id_afiliado id_empresa nit_empresa observacion nombre Y con un INNER JOIN ...
  #1 (permalink)  
Antiguo 05/04/2010, 16:21
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Problema con INNER JOIN

Hola a todos, tengo tres tablas.

Código:
gestiones |   afiliados    |   empresa   
id_gestion     id_afiliado     id_empresa
id_afiliado      id_empresa      nit_empresa
 observacion   nombre

Y con un INNER JOIN

Código:
SELECT emp.nit_empresa, afi.nombre, gs.observacion, 
FROM 
afiliados afi 
INNER JOIN empresas emp ON afi.id_empresa = emp.id_empresa
INNER JOIN gestiones gs ON afi.id_afiliado = gs.id_afiliado
Hasta ahí perfecto me muestra las empresas que tienen gestión en la tabla de gestiones, pero cómo haría para que me trajera todo los afiliados sin importar si tienen o no gestión, es decir, si un afiliado no tiene gestión que igual me lo trajera en el resultado.

Espero me puedan colaborar con esto :)
  #2 (permalink)  
Antiguo 05/04/2010, 18:53
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con INNER JOIN

cambia el inner join por un left join.
El left join trae los registros que coinciden y aquellos que solo pertenecen a la tabla declarada a la izquierda.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 06/04/2010, 07:34
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Problema con INNER JOIN

Hola fijate que ejecute la sentencia así:

Código:
SELECT emp.nit_empresa, afi.nombre, gs.observacion, 
FROM 
afiliados afi 
INNER JOIN empresas emp ON afi.id_empresa = emp.id_empresa
LEFT JOIN gestiones gs ON afi.id_afiliado = gs.id_afiliado
El INNER JOIN ya que todos los afiliados hacen parte de una empresa, y por otro lado el LEFT JOIN para que traiga las coincidencias y las que no serían null.

Pero ejecuto la consulta y se queda mucho tiempo ejecutandose y he esperado al menos 15 mins y no termina, la cantidad de afiliados igual es de 18.000, pero como la consulta se ejecuta sobre un servidor en producción se complica dejar la consulta mucho tiempo porque vuelve lentos algunos procesos.
  #4 (permalink)  
Antiguo 06/04/2010, 07:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con INNER JOIN

Vaya si está raro.

Esto puede presentarse si hay muchos afiliados que no tengan gestiones.

Prueba de esta forma
Código MySQL:
Ver original
  1. SELECT emp.nit_empresa, afi.nombre, gs.observacion,
  2. afiliados afi
  3. LEFT JOIN gestiones gs ON afi.id_afiliado = gs.id_afiliado
  4. INNER JOIN empresas emp ON afi.id_empresa = emp.id_empresa

Solo cambié el orden, pero es posible que el cruce con afiliados primero, no tenga que hacer de nuevo el cruce con gestiones.

Pregunta... esta dura 15 minutos. Con inner join cuanto dura?
Cual es la cantidad de registros que arroja con inner join y cual con left join?

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 06/04/2010, 09:14
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Problema con INNER JOIN

Gracias por responder,

Mira que lo que pasa es que ejecute la consulta y perfecto pero me trae menos registros de los que son, y no se porque pasa esto, el INNER JOIN agrupa? ya que en la tabla de gestiones tengo 14.476 y cuando hago la consulta me arroja 2.080 .. y es porque un afiliado tiene muchas gestiones pero solo trae una :S .

Que esta fallando en la consulta? :S

En serio gracias por la colaboración.
  #6 (permalink)  
Antiguo 06/04/2010, 09:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con INNER JOIN

No...
el inner join no agrupa... simplemente condiciona que registros cumplen con afi.id_afiliado = gs.id_afiliado.

Si en ambas tablas coinciden registros, los muestra.

Te recomiendo hacer pruebas con una cantidad de datos menor y así ir detectando el problema.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: join
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 19:14.