SQL - Consulta con Left Join

 
Vista:
sin imagen de perfil

Consulta con Left Join

Publicado por Miguel (3 intervenciones) el 19/11/2014 22:04:49
Hola,

Una consulta con la que me estoy volviendo loco, tengo dos tablas, la típica de articulos y la de stock vinculadas por un código de artículo.

TABLA ARTICULOS
--------------------------
Codigo
Descripcion

TABLA STOCK
---------------------
Codigo
Almacen
Stock

Ahora quiero sacar el código, descripción y stock del almacén 1 de una seríe de artículos cuya descripción comienza por "CAJA", hago:

Select Articulos.Codigo, Articulos.Descripcion,Stock.Stock
From Articulos LEFT JOIN Stock on Articulos.Codigo=Stock.Codigo
WHERE Articulos.Descripcion LIKE 'CAJA%' AND Stock.Almacen=1

Esta consulta me funciona siempre y cuando en ambas tablas existan los códigos del artículo si no tengo registro en la tabla stock de un código no sale en los resultados, yo quiero que salga el stock a null o a cero.

No sé si me he explicado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta con Left Join

Publicado por leonardo_josue (1173 intervenciones) el 19/11/2014 22:27:44
Hola Miguel:

El problema con la consulta es que estás colocando una condición que tiene que ver con la tabla Stock... es decir, al poner esto:

1
Stock.Almacen=1

estás obligando a que exista un registro en dicha tabla, si no existe, entonces no aparece el registro... lo único que tienes que hacer es agregar una condición para cuando NO EXISTAN REGISTROS EN LA TABLA STOCK, es decir, algo como esto:

1
2
3
4
...
AND
(Stock.Almacen=1 OR Stock.Almacen IS NULL)
...

Creo que esto deberá ser suficiente para obtener lo que quieres. Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Consulta con Left Join

Publicado por Miguel (3 intervenciones) el 20/11/2014 10:58:29
Gracias Leo

Funciona perfectamente

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta con Left Join

Publicado por Miguel (3 intervenciones) el 20/11/2014 11:55:41
Una cosa más ... pensaba que ya estaba por que he probado con Articulos.Codigo="xxxx" pero si lo hago con Articulos.Descripcion LIKE 'XXX%' se me queda la consulta tostada no termina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta con Left Join

Publicado por leonardo_josue (1173 intervenciones) el 20/11/2014 15:49:25
Hola de nuevo Miguel:

Las consultas tipo LIKE son por defecto las que peor rendimiento tienen en cualquier motor de BD's, por lo tanto debes evitarlas en la medida de lo posible. El que una consulta tarde en ejecutarse depende también de otras cosas, como por ejemplo el número de registros en tu tabla o la longitud de las descripciones en los campos donde realizas la búsqueda...

Nunca nos mencionaste con qué motor de BD's de datos, por lo que resulta complejo darte alguna otra alternativa, pero te sugiero en primer lugar que utilices índices sobre los campos que estás utilizando para la búsqueda, esto suele incrementar la velocidad de ejecución de manera significativa.

Otra alternativa sería utilizar BÚSQUEDAS DE TEXTO COMPLETO en lugar del operador LIKE, revisa si la BD's que estás utilizando para este propósito soporta este tipo de búsquedas, ya que tienen un mejor rendimiento que con LIKE... también verifica que los campos que estás utilizando para hacer los JOIN's estén definidos como índices.

Finalmente, podrías probar cambando el orden de tus condiciones, dejando las comparaciones LIKE hasta el final...

1
2
3
4
5
...
WHERE
   (Stock.Almacen=1 OR Stock.Almacen IS NULL) AND
   Articulos.Descripcion LIKE 'CAJA%'
...


Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar