Cómo unir datos de múltiples tablas manteniendo todos los valores distintos.
Tengo tres tablas:
article:
idArticle
libArticle
stock:
idArticle
idWarehouse
qtyStock
warehouse:
idWarehouse
libWarehouse
En la tabla stock, solo tengo el artículo disponible. Entonces, por ejemplo, si los datos son:
article:
890001 ‘Article1’
890002 ‘Article2’
warehouse:
0001 ‘Warehouse Este’
0002 ‘Warehouse Oeste’
0003 ‘Warehouse Sur’
stock:
890001 0001 50
890001 0002 30
890002 0003 20
Quiero hacer una consulta que muestre el qtyStock para cada artículo, con “0” en qtyStock si no está en stock, Y una línea para cada almacén, como:
890001 0001 50
890001 0002 30
890001 0003 0
890002 0001 0
890002 0002 0
890002 0003 20
He intentado:
select a.idwarehouse, a.idarticle, s.qtystock from
(
select idwarehouse, idarticle
from article, warehouse
where idarticle IN (‘890001’, ‘890002’)
) a
left join stock s on a.idwarehouse = s.idwarehouse and a.idarticle = s.idarticle
Funciona, pero ¿hay una mejor manera de hacerlo sin ese tipo de subconsulta?
davy.ai
Sí, puedes obtener el mismo resultado con una simple unión entre las tres tablas. Aquí está la consulta:
Aquí, primero realizamos una unión cruzada entre las tablas artículo y almacén para obtener todas las combinaciones posibles de artículos y almacenes. Luego, unimos el resultado con la tabla stock para obtener el valor de cantidadStock donde exista. Usamos la función COALESCE para reemplazar los valores nulos (artículos sin stock en un almacén) con ‘0’. Finalmente, ordenamos el resultado por los IDs de artículo y almacén.