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

Problema con consulta Left Join

Estas en el tema de Problema con consulta Left Join en el foro de Mysql en Foros del Web. He realizado un LEFT JOIN entre 2 tablas. La Tabla A tiene Avisos y la Tabla B guarda el id del aviso y el id ...
  #1 (permalink)  
Antiguo 01/04/2009, 05:34
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Problema con consulta Left Join

He realizado un LEFT JOIN entre 2 tablas.
La Tabla A tiene Avisos y la Tabla B guarda el id del aviso y el id de los postulantes del aviso.
Al mostrar los datos indico el Aviso y la cantidad de posultaciones de ese aviso para lo cual aplico la funcion COUNT al id del aviso.
El problema esta que al listar solo me muestra los avisos con postulaciones y necesito que tambien me muestre los avisos sin postulaciones que estan en 0 o NULL

Esta es la consulta que estoy usando:

SELECT
A.id,
A.aviso,
COUNT(B.aviso_id) AS TOTAL
FROM A
LEFT JOIN B
ON A.id = B.posting_id
WHERE A.id=55
GROUP BY B.aviso_id


Muchas Gracias a quien pueda ayudarme
  #2 (permalink)  
Antiguo 01/04/2009, 06:15
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: Problema con consulta Left Join

Prueba esto:
Código sql:
Ver original
  1. SELECT
  2.    A.id,
  3.    A.aviso,
  4.    COUNT(B.aviso_id) AS TOTAL
  5. FROM A LEFT JOIN B ON A.id = B.posting_id
  6. GROUP BY A.aviso_id

Tip: Si agrupas por la tabla B solamente te agrupará por los que existen en esa tabla, esto es los que si tienen postulaciones...
__________________
¿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 01/04/2009, 06:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con consulta Left Join

Y esto?...

Código sql:
Ver original
  1. SELECT A.id, A.aviso, SbC.postulantes AS TOTAL
  2. FROM A LEFT JOIN (SELECT B.posting_id, COUNT(*) AS postulantes
  3.                                      FROM B
  4.                                       GROUP BY B.posting_id) AS SbC
  5. ON A.id = SbC.posting_id



en la sentencia de gnzsoloyo cambiaria

GROUP BY A.id, A.aviso


creo...


Quim

Última edición por quimfv; 01/04/2009 a las 06:56
  #4 (permalink)  
Antiguo 01/04/2009, 09:16
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Problema con consulta Left Join

Estimados he probado modifcando el GROUP BY como me indicaron pero no he tenido exito. quimfv me sugeris que cambie la consulta por la que indicaste en la respuesta.

Muchas Gracias.
  #5 (permalink)  
Antiguo 02/04/2009, 02:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con consulta Left Join

Código sql:
Ver original
  1. SELECT A.id, A.aviso, SbC.postulantes AS TOTAL
  2.       FROM A LEFT JOIN (SELECT B.posting_id, COUNT(*) AS postulantes
  3.                                          FROM B
  4.                                          GROUP BY B.posting_id) AS SbC
  5.       ON A.id = SbC.posting_id

Si, si usa esta .... tiene que funcionar.... incluso puedes usar la funcion IFNULL(SbC.postulantes,0), mira en la ayudas la sintaxis exacta, para substituir los nulos por ceros.

En esta lo que se hace es una subconsulta sobre la tabla B donde se cuentan cuantos postulantes hay para cada posting_id. Los que no tengan obviemente no saldran.

Luego se hace el LEFT JOIN de la tabla A con la subconsulta anterior con lo que los id que no aparecian en la subconsulta por no estar en B apareceran (LEFT JOIN).

Subconsultas apartir de MySql 5, creo.

Quim
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:58.