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

Inner join if?

Estas en el tema de Inner join if? en el foro de Mysql en Foros del Web. Hola a todos!!, hacia rato que no andaba por estos lares, pero bue aqui estoy yo nuevamente con un temita, tengo una consulta SQL en ...
  #1 (permalink)  
Antiguo 16/03/2009, 19:03
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Inner join if?

Hola a todos!!, hacia rato que no andaba por estos lares, pero bue aqui estoy yo nuevamente con un temita, tengo una consulta SQL en donde quiero listar todos los "PRODUCTOS" y el nombre de la "CATEGORIA" correspondiente, obviamente los dos almacenados en 2 tablas separadas, entonces realizo la siguiente consulta:

Código:
SELECT p.*,c.name  FROM productos AS p
                  INNER JOIN categorias AS c ON c.id = p.category_id
              WHERE a.user_id='Una Variable' order by p.created DESC ";
El problema que tengo es que p.category_id puede ser "0"(uncategorized) y éste no esta en la tabla categorias, entonces el SQL me devuelve solo aquellos registros en donde encuentra la concordancia(c.id = p.category_id). esto esta bien, es lógico lo que hace, pero que manera existe de traerme todos los "PRODUCTOS" y si el id de categoria de este producto concuerda con el de la tabla categorias, traer el nombre de la categoria??? Gracias!!!!!
__________________
Artis
  #2 (permalink)  
Antiguo 17/03/2009, 20:00
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: Inner join if?

Existen dos formas de manejar la cosa:
1. La más tosca: Agregar una categoróa cero (0) que tenga como descripción "NO CATEGORIZADO".
2. Resolverlo no con INNER JOIN sino con LEFT JOIN:
Código sql:
Ver original
  1. SELECT p.*, IFNULL(c.name,'Uncategorized') name  
  2. FROM productos p LEFT JOIN categorias c ON c.id = p.category_id
  3. WHERE a.user_id='Una Variable'
  4. ORDER BY p.created DESC ";

LEFT JOIN devuelve todos los valores validos de la primera tabla (izquierda), incluyendo NULL donde no existan coincidencias. Usando IFNULL() se puede hacer que NAME tenga un contenido alternativo en aquellos casos en que el producto tiene categoría 0.
__________________
¿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 19/03/2009, 07:02
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Respuesta: Inner join if?

Muchisimas Gracias!!!! me sirvio Mucho, no conocia las propiedades LEFT - RIGHT join pero estuve estudiando acerca de ellas, te agradezco muchisimo!! Saludos!!!
__________________
Artis
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 11:35.