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

Incluir en LEFT JOIN datos no existentes

Estas en el tema de Incluir en LEFT JOIN datos no existentes en el foro de Mysql en Foros del Web. Tengo 2 tablas: ARTICULOS - articulo - descripcion EXISTENCIAS - articulo - existencia @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original $consulta = mysql_query ( " SELECT ...
  #1 (permalink)  
Antiguo 21/04/2010, 23:17
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Incluir en LEFT JOIN datos no existentes

Tengo 2 tablas:

ARTICULOS
- articulo
- descripcion

EXISTENCIAS
- articulo
- existencia

Código MySQL:
Ver original
  1. $consulta = mysql_query("
  2. SELECT articulos.articulo, articulos.descripcion, existencias.existencia
  3. FROM articulos
  4. LEFT JOIN  existencias on articulos.articulo=existencias.articulo
  5. WHEN existencias.existencia <= 0",
  6. $link) or die ("No se pudo ejecutar la consulta (4)");
El contenido de las tablas es el siguiente:

ARTICULOS
articulo, descripcion
abc, articulo x
bcd, articulo y

EXISTENCIAS
articulo, existencia
abc, 100

NOTA: Obsérvese que no se encuentra registrado el artículo bcd en la tabla de existencias.
  • Y la consulta me muestra solo el artículo abc.
  • El articulo bcd (que no se encuentra en la tabla EXISTENCIAS) no lo muestra, lo que significa que la existencia es = 0.
¿Como debo configurar mi consulta para mostrar el artículo bcd y que su existencia sea cero, aún cuando no exista en la tabla de existencias?
  #2 (permalink)  
Antiguo 22/04/2010, 05: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: Incluir en LEFT JOIN datos no existentes

El cruce de dos tablas con LEFT JOIN donde no haya concidencias entre la primera y la segunda tablas devuelve NULL sobre los registros de la tabla derecha que no coincidan con los de la izquierda.
Recuerda que NULL no es un valor, por lo que no sirve usar comparadores lógicos:
Código MySQL:
Ver original
  1. SELECT A.articulo, A.descripcion, IFNULL(E.existencia, 0) existencia
  2. FROM articulos A
  3. LEFT JOIN  existencias E ON A.articulo=E.articulo
  4. WHEN existencias.existencia IS NULL;

Uso la función IFNULL(columna, valor) para evitar que salga NULL sobre la columna, reemplazandolo por cero. También se puede usar COALESCE(), pero éste opera sobre una lista de valores, o bien IF(comparacion, verdadero, falso).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 22/04/2010 a las 05:56
  #3 (permalink)  
Antiguo 22/04/2010, 05:23
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Incluir en LEFT JOIN datos no existentes

Gracias gnzsoloyo,

Explicación perfecta.
Asunto resuelto.

Nuevamente gracias por aclararlo.
  #4 (permalink)  
Antiguo 22/04/2010, 05:56
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: Incluir en LEFT JOIN datos no existentes

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: existentes, incluir, join, left
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 17:59.