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

Consulta sql: select join devuelva algo si no hay resultados.

Estas en el tema de Consulta sql: select join devuelva algo si no hay resultados. en el foro de Mysql en Foros del Web. Buenas tardes/mañanas/noches. Bueno, quizas el titulo explico poco y nada pero el tema es asi. Tengo quizas lo clasico, una tabla con categorias y una ...
  #1 (permalink)  
Antiguo 12/01/2011, 10:09
Avatar de el_gustavo  
Fecha de Ingreso: mayo-2009
Mensajes: 117
Antigüedad: 14 años, 11 meses
Puntos: 0
De acuerdo Consulta sql: select join devuelva algo si no hay resultados.

Buenas tardes/mañanas/noches.
Bueno, quizas el titulo explico poco y nada pero el tema es asi.
Tengo quizas lo clasico, una tabla con categorias y una tabla con productos.

La tabla categorias tiene nombre_categoria, id.
La tabla productos tiene id,nombre, categoria_id.
Lo que necesito hacer es extraer las categorias con la cantidad de productos que tiene cada una entonces hice asi.
Código MySQL:
Ver original
  1. SELECT categorias.id, categorias.nombre_categoria, prod.tot
  2.         FROM categorias
  3.         JOIN (
  4.  
  5.         SELECT
  6.         if(COUNT( productos.id )>0,COUNT( productos.id ),0) as tot, categoria_id
  7.         FROM productos
  8.         GROUP BY categorias_id
  9.         ) AS prod ON prod.categoria_id = categorias.id


El problema es que obviamente, me devuelve unicamente las categorias que tienen productos pero no asi las que no tienen productos.
Existe alguna forma tal que al listar las categorias las cuales no tengan productos.
Ej:
Tengo dos categorias, A y B y un producto que pertenece a la categoria A.
Esa consulta me devuelve:
categoria: A ,productos:1
y yo quiero que devuelva:
categoria: A ,productos:1
categoria: B,productos:0
Espero se entienda.

Muchas gracias por la ayuda

Última edición por el_gustavo; 12/01/2011 a las 10:15
  #2 (permalink)  
Antiguo 12/01/2011, 10:17
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta sql: select join devuelva algo si no hay resultados.

prueba con el LEFT JOIN.

Código MySQL:
Ver original
  1. SELECT categorias.id, categorias.nombre_categoria, prod.tot
  2.         FROM categorias
  3.        LEFT JOIN (
  4.  
  5.         SELECT
  6.         if(COUNT( productos.id )>0,COUNT( productos.id ),0) as tot, categoria_id
  7.         FROM productos
  8.         GROUP BY categorias_id
  9.         ) AS prod ON prod.categoria_id = categorias.id
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 12/01/2011, 10:24
Avatar de el_gustavo  
Fecha de Ingreso: mayo-2009
Mensajes: 117
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Consulta sql: select join devuelva algo si no hay resultados.

La probe pero no funciona, devuelve como valor null.
  #4 (permalink)  
Antiguo 12/01/2011, 10:26
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta sql: select join devuelva algo si no hay resultados.

pero devuelve mas reguistros? los muestra null.... pero si lista las categorias?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 12/01/2011, 10:30
Avatar de el_gustavo  
Fecha de Ingreso: mayo-2009
Mensajes: 117
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Consulta sql: select join devuelva algo si no hay resultados.

Si, las lista, devuelve mas resultados pero queda como
categoria: null ,productos:0
categoria: B ,productos:1
Me parece que tendria que usar una Union aunque me gustaria evitarla...
  #6 (permalink)  
Antiguo 12/01/2011, 10:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta sql: select join devuelva algo si no hay resultados.

añade a la consulta de huesos52 la función ifnull y tendrás, creo, lo que quieres. He quitado alguna cosa como el if de la subconsult, porque no parece necesario. Pruébalo. Yo no lo he probado
Código MySQL:
Ver original
  1. SELECT categorias.id, categorias.nombre_categoria, IFNULL(prod.tot,0) totcat
  2.         FROM categorias
  3.        LEFT JOIN (
  4.  
  5.         SELECT
  6.        COUNT( productos.id ) as tot, categoria_id
  7.         FROM productos
  8.         GROUP BY categorias_id
  9.         ) AS prod ON  categorias.id = prod.categoria_id
  #7 (permalink)  
Antiguo 12/01/2011, 12:54
Avatar de el_gustavo  
Fecha de Ingreso: mayo-2009
Mensajes: 117
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Consulta sql: select join devuelva algo si no hay resultados.

Ahi funciono bien!!Gracias Jurena y Huesos, hasta la proxima!

Etiquetas: join, resultados, select, sql
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:01.