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

Problemas con consulta usando JOIN

Estas en el tema de Problemas con consulta usando JOIN en el foro de Bases de Datos General en Foros del Web. Hola.Tengo un pequeño problema con una consulta que deseo realizar. En mi base datos tengo un par de tablas: encabezado_guia_servicio, cuero_guia_servicio, pie_guia_servicio. Resulta que todas ...
  #1 (permalink)  
Antiguo 25/11/2009, 12:02
Avatar de Capote  
Fecha de Ingreso: julio-2007
Ubicación: C h i l e
Mensajes: 136
Antigüedad: 16 años, 9 meses
Puntos: 0
Problemas con consulta usando JOIN

Hola.Tengo un pequeño problema con una consulta que deseo realizar.
En mi base datos tengo un par de tablas: encabezado_guia_servicio, cuero_guia_servicio, pie_guia_servicio. Resulta que todas estan unidas por el numero de guia que es pk en la tabla encabezado_guia_servicio.
Ahora necesito hacer una consulta, que me traiga los datos de las 3 tablas y si en alguna de ella hay llavaes foraneas de otras tablas por medio de un join "remplazo" ese "id" por la descripcion ( asi no sale un 1,2,3,4...N y sale su descripcion: Activo, inactivo, etc) , hasta ahi todo bien. ahora el problemilla es el siguiente. Resulta que deseo traer los valores de los parametros de la tabla cuerpo_guia_servicio (numero_linea, cantidad, volumen) pero sucede que en vez de mostrarme los datos como estan en la base datos que es asi:

Numero linea-----Cantidad-------Volumen
........1.....................10...............100 ...
........2.....................25...............80. ....

Me trae:

Numero linea-----Cantidad-------Volumen
........1.....................10...............100 ...
........1.....................10...............80. ....
........1.....................25...............100 ...
........1.....................25...............80. ....
........2.....................10...............100 ...
........2.....................10...............80. ....
........2.....................25...............100 ...
........2.....................25...............80. ....


Aqui mi código:

Código PHP:
select 
eg
.numero_guia_servicio,
eg.fecha_guia,
CONCAT(c.rut_cliente,"-",c.dv_cliente),
eg.id_contrato_cliente,
re.descripcion_relleno_sanitario,
eg.numero_ticket_relleno,
est.descripcion_estado_guia,
cg1.numero_linea,
cg2.cantidad,
cg3.volumen


from encabezado_guia_servicio eg

join cliente c ON eg
.rut_cliente c.rut_cliente
join relleno_sanitario re on eg
.id_relleno_sanitario=re.id_relleno_sanitario
join estado_guia_servicio est on eg
.id_estado_guiaest.id_estado_guia 
join cuerpo_guia_servicio cg1 on eg
.numero_guia_serviciocg1.numero_guia_servicio
join cuerpo_guia_servicio cg2 on eg
.numero_guia_servicio cg2.numero_guia_servicio
join cuerpo_guia_servicio cg3 on eg
.numero_guia_servicio cg3.numero_guia_servicio 
¿Que estoy haciendo mal en la consulta?
saludos
__________________
"La blanda respuesta quita la ira, Mas la palabra áspera hace subir el furor"
  #2 (permalink)  
Antiguo 25/11/2009, 12:16
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, 5 meses
Puntos: 2658
Respuesta: Problemas con consulta usando JOIN

Cita:
¿Que estoy haciendo mal en la consulta?
Como mínimo, invocando tres veces la misma tabla para traer de cada uno un campo diferente, con lo que se puede estar formando un producto cartesiano.
Si los tres campos están en la misma tabla, y la tabla la vinculas por un sólo valor ¿para qué la invocas tres veces?
Además, el JOIN no es suficientemente discriminatorio. En tu caso es mejor usar INNER JOIN:
Código SQL:
Ver original
  1. SELECT
  2.   eg.numero_guia_servicio,
  3.   eg.fecha_guia,
  4.   CONCAT(c.rut_cliente,"-",c.dv_cliente),
  5.   eg.id_contrato_cliente,
  6.   re.descripcion_relleno_sanitario,
  7.   eg.numero_ticket_relleno,
  8.   est.descripcion_estado_guia,
  9.   cg1.numero_linea,
  10.   cg1.cantidad,
  11.   cg1.volumen
  12. FROM encabezado_guia_servicio eg
  13.   INNER JOIN cliente c USING(rut_cliente)
  14.   INNER JOIN relleno_sanitario re USING(id_relleno_sanitario)
  15.   INNER JOIN estado_guia_servicio est USING(id_estado_guia)
  16.   INNER JOIN cuerpo_guia_servicio cg1 USING(numero_guia_servicio);
En este ejemplo uso USING en lugar de ON, porque como los campos en ambas tablas tienen el mismo nombre, funciona mejor USING.
__________________
¿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 25/11/2009, 12:50
Avatar de Capote  
Fecha de Ingreso: julio-2007
Ubicación: C h i l e
Mensajes: 136
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problemas con consulta usando JOIN

Muchas gracias @gnzsoloyo, ahora funciono bien.
__________________
"La blanda respuesta quita la ira, Mas la palabra áspera hace subir el furor"
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 23:40.