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

Cosulta SQL dificil :S

Estas en el tema de Cosulta SQL dificil :S en el foro de Bases de Datos General en Foros del Web. Hola, Les explico lo que quiero hacer: Tengo una tabla con las aplicaciones: data_appcreator y otro con respuestas resp_appcreator . Nesesito selecionar las aplicaciones que ...
  #1 (permalink)  
Antiguo 13/09/2009, 17:04
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Cosulta SQL dificil :S

Hola,
Les explico lo que quiero hacer:
Tengo una tabla con las aplicaciones: data_appcreator y otro con respuestas resp_appcreator. Nesesito selecionar las aplicaciones que tengan mas de 10 respuestas. En resp_appcreator tengo una fila donde estan el id de la aplicacion.
Como puedo hacerlo?
Gracias
Salu2

PD: Uso mysql
__________________
Half Music - www.halfmusic.com
  #2 (permalink)  
Antiguo 14/09/2009, 01:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Cosulta SQL dificil :S

Supongamos

data_appcreator
idaplicacion
fecha
nombre

resp_appcreator

idresp
idaplicacion
....


luego


Código sql:
Ver original
  1. SELECT dt.nombre,
  2.            COUNT(*) AS Respuestas
  3. FROM resp_appcreator AS resp LEFT JOIN data_appcreator AS dt
  4.           ON resp.idaplicacion=dt.idaplicacion
  5. GROUP BY resp.idaplicacion
  6. HAVING COUNT(*)>=10;


Si?

Quim
  #3 (permalink)  
Antiguo 14/09/2009, 01:46
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Cosulta SQL dificil :S

Hola,
Gracias. Pero como puedo hacer para que me de todos los campos, son muchos. El sql me quedo haci:
Código sql:
Ver original
  1. SELECT dt.nombre, COUNT( * ) AS Respuestas
  2. FROM resp_appcreator AS resp
  3. LEFT JOIN data_appcreator AS dt ON resp.idapp = dt.id
  4. GROUP BY resp.idapp
  5. HAVING COUNT( * ) >=10;
Pero solo me da 2 campos ( nombre y cantidad de respuestas ) :(
Gracias
Salu2
__________________
Half Music - www.halfmusic.com
  #4 (permalink)  
Antiguo 14/09/2009, 05:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Cosulta SQL dificil :S

Código sql:
Ver original
  1. SELECT dt.nombre,
  2.       ....mas campos de dt separados por coma....
  3.       COUNT( * ) AS Respuestas
  4.       FROM resp_appcreator AS resp
  5.       LEFT JOIN data_appcreator AS dt ON resp.idapp = dt.id
  6.       GROUP BY resp.idapp,
  7.       ....los mismos campos de dt separados por coma....
  8.       HAVING COUNT( * ) >=10;

Es decir puedes provocar que salgan todos los campos que quieras de data_appcreator puesto que seran comunes para un mismo programa...

Tambien puedes poner campos de resp_appcreator pero lo logico es que cada respuesta sea distinta de las otras con lo que el count no serà para cada programa si no que en el extremo seria siempre 1 puesto que cada respuesta puede ser distinta de las otras...

No se si me he explicado....

Quim
  #5 (permalink)  
Antiguo 14/09/2009, 14:15
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Cosulta SQL dificil :S

Gracias.... pero hay algunos campos que me da en NULL y no estan porque pasa eso?
Salu2 :adiso:
__________________
Half Music - www.halfmusic.com
  #6 (permalink)  
Antiguo 15/09/2009, 00:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Cosulta SQL dificil :S

Cita:
Iniciado por pato12 Ver Mensaje
Gracias.... pero hay algunos campos que me da en NULL y no estan porque pasa eso?
Salu2 :adiso:
No tiene sentido...

Intenta esto

Código sql:
Ver original
  1. SELECT dt.nombre,
  2. ....TODOS los campos de dt separados por coma.... ,
  3. resp.idresp
  4. FROM resp_appcreator AS resp
  5. LEFT JOIN data_appcreator AS dt ON resp.idapp = dt.id;

Si asi te sale algun campo nulo es que es nulo.

resp_appcreator AS resp LEFT JOIN data_appcreator AS dt

Solo saldran los programas que tengan alguna respuesta claro...

Quim
  #7 (permalink)  
Antiguo 15/09/2009, 05:08
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: Cosulta SQL dificil :S

El uso de LEFT JOIN en el contexto que lo usas hace que te devuelva toda la tabla de la izquierda, poniendo los valores de la tabla derecha que coinciden, y NULL en donde no se cumple la relación.
Es parte del funcionamiento normal del LEFT JOIN y su simétrico RIGHT JOIN.
Es útil, por ejemplo, cuando quieres encontrar todos aquellos de la tabla izquierda que no tienen coincidencias con la de la derecha:
Código SQL:
Ver original
  1. SELECT A.*
  2. FROM A LEFT JOIN B ON A.id = B.id
  3. WHERE B.nombre IS NULL;
Si vas a recuperar datos de ambas tablas lo que debes hacer es controlar aquellos campos que tengan un posible NULL usando, por ejemplo, la función IFNULL(campo, valor), de modo de poner un resultado alternativo cuando el campo llega en NULL: IFNULL(campo, ''), por ejemplo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 01:50.