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

[SOLUCIONADO] left join a 3 tablas

Estas en el tema de left join a 3 tablas en el foro de PostgreSQL en Foros del Web. Buenas tardes a todos, Estoy tratando de hacer un left join sobre tres tablas, pero al momento de ejecutar la consuta me sale el siguiente ...
  #1 (permalink)  
Antiguo 06/06/2014, 15:33
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 10 años, 6 meses
Puntos: 0
left join a 3 tablas

Buenas tardes a todos,

Estoy tratando de hacer un left join sobre tres tablas, pero al momento de ejecutar la consuta me sale el siguiente error: El servidor dice ERROR: el nombre de tabla «actividad_tipos» fue especificado más de una vez.

No entiendo cual es el problema, esta es la consulta :

Código SQL:
Ver original
  1. SELECT ejecucion_etapa.etacodigo, actividad_tipos.actcodigo, SUM(ejecucion_actividad.totalactiva) AS cant
  2.         FROM ejecucion_actividad, ejecucion_etapa, actividad_tipos
  3.         LEFT JOIN actividad_tipos ON (ejecucion_actividad.codigoacttip = actividad_tipos.actcodigo)
  4.         LEFT JOIN ejecucion_etapa ON (ejecucion_actividad.codigoacttip = ejecucion_etapa.etacodigo)    
  5.         WHERE opcodigo='$op'
  6.         GROUP BY ejecucion_etapa.etacodigo, actividad_tipos.actcodigo
  7.         ORDER BY ejecucion_etapa.etacodigo ASC


Cabe acotar que soy bastante nuevo en postgres, agradecería cualquier tipo de ayuda.

Gracias

Última edición por gnzsoloyo; 07/06/2014 a las 13:56 Razón: No etiquetado...
  #2 (permalink)  
Antiguo 06/06/2014, 15:50
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: left join a 3 tablas

Para eso se inventaron los alias.
__________________
¿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 06/06/2014, 16:04
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: left join a 3 tablas

gracias por responder pero no me dices nada con eso.
  #4 (permalink)  
Antiguo 06/06/2014, 16:10
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: left join a 3 tablas

Hola. Busca en Google "alias en SQL" y entenderás.
Es SQL básico...
__________________
¿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 07/06/2014, 10:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: left join a 3 tablas

estas haciendo un join bastante raro ya que combinas sentencias JOIN con tablas separadas por comas.
Ademas, el error en concreto es que en la consulta llamas 2 veces la tabla actividad_tipos lo cual no tiene ningun sentido
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 07/06/2014, 14:04
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: left join a 3 tablas

@huesos53 tiene razón. Tu query está mal escrita, no porque tenga errores de sintaxis, sino de lógica.
Si usas JOINs implicitos, no debes usar explícitos, ni viceversa. Además, para lo que quieres no aplican los implícitos. Por otro lado, estás invocando dos veces cada tabla, lo que no se entiende para qué.
La sintaxis más aproximada sería:
Código SQL:
Ver original
  1. SELECT
  2.     EE.etacodigo,
  3.     ACT.actcodigo,
  4.     SUM(EA.totalactiva) AS cant
  5. FROM
  6.     ejecucion_actividad
  7.         LEFT JOIN
  8.     actividad_tipos ON (EA.codigoacttip = ACT.actcodigo)
  9.         LEFT JOIN
  10.     ejecucion_etapa ON (EA.codigoacttip = EE.etacodigo)
  11. WHERE
  12.     opcodigo = '$op'
  13. GROUP BY EE.etacodigo, ACT.actcodigo
  14. ORDER BY EE.etacodigo ASC

Por otro lado, una nota (espero que ya lo hayas buscado en Google como te dije): Esos EE, EA y ACT, son alias puestos en la query para las tablas.
No puedo asegurarte que el resultado sea realmente el que buscas, porque los LEFT JOIn con más de dos tablas tienen a generar productos cartesianos, ya que al no relacionar la segunda y tercera tabla entre si, se genera una relación en estrella. Y ese tipo de relaciones tiende a producir errores de resultados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 09/06/2014, 08:27
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: left join a 3 tablas

Gracias por sus respuestas y la información.

Etiquetas: join, left, tablas
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 05:20.