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

se pueden meter estas 2 consultas en una??

Estas en el tema de se pueden meter estas 2 consultas en una?? en el foro de Bases de Datos General en Foros del Web. me estoy volviendo loco con esto.. explico lo que quiero selecccionar: tengo una tabla de noticias y otra tabla de comentarios, entonces quiero listar las ...
  #1 (permalink)  
Antiguo 08/08/2005, 15:38
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
se pueden meter estas 2 consultas en una??

me estoy volviendo loco con esto.. explico lo que quiero selecccionar:

tengo una tabla de noticias y otra tabla de comentarios, entonces quiero listar las noticias y en una columna poner el numero de comentarios que tiene esa noticia, para eso debo contarlos para cada una o puedo seleccionar ambas cosas en una consulta sola?? porq a mi parecer meter una consulta dentro de un while no queda bien.. pero nose.

gracias
  #2 (permalink)  
Antiguo 08/08/2005, 16:01
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Combina JOINS con COUNT, algo como

SELECT noticia, count(comentarios) as num_comentarios
FROM noticias n
INNER JOIN comentarios c
ON n.llave = c.llave
GROUP BY noticia
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 08/08/2005, 19:34
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
perdon, q es la "n" y la "c" ?? un alias de la tabla?? no falta el "AS"??

bueno hice esto y no me funciona, el inner join segun lei en un tutorial dice esto:

Si empleamos la cláusula INNER en la consulta se seleccionarán sólo aquellos registros de la tabla de la que hayamos escrito a la izquierda de INNER JOIN que contengan al menos un registro de la tabla que hayamos escrito a la derecha.


eso no es lo que quiero, quiero todas las noticias, incluso las que no tengan comentarios..

Última edición por SiR.CARAJ0DIDA; 08/08/2005 a las 19:44
  #4 (permalink)  
Antiguo 09/08/2005, 14:54
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Si, N y C son alias. El AS es opcional, en lo personal lo uso solo para los campos y no en las tablas.

Para seleccionar todas las noticias entonces cambia de un INNER JOIN a un OUTER JOIN:

SELECT noticia, count(comentarios) as num_comentarios
FROM noticias n
LEFT OUTER JOIN comentarios c
ON n.llave = c.llave
GROUP BY noticia
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 09/08/2005, 16:02
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
listo funciono pero sigo sin entender el funcionamiento..

gracias =
  #6 (permalink)  
Antiguo 11/08/2005, 15:42
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Asumo que entiendes todo si se tratara de un INNER JOIN.

La única diferencia es que el OUTER JOIN toma TODOS los registros de una tabla (u otro join). ¿Cual lado? Para eso indicas LEFT o RIGHT.

LEFT OUTER JOIN indica que tomará todos los registros de "noticias", y todos los que cumplan la condición para "comentarios". Si algún registro de "noticias" no tiene comentario(s) asociado(s) tendrá NULLs en donde irían los datos de la segunda tabla, con lo que el SUM te da cero.

En pocas palabras, toma todas las noticias, tengan o no comentarios asociados.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
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:03.