Usando una subconsulta en un JOIN

Por 0 No tags Permalink

Cuando escribimos un SELECT en ocasiones necesitamos usar un JOIN para relacionar a un conjunto de resultados con otro conjunto.

Notas:

  • La subconsulta (o sea, el segundo SELECT ) se encuentra rodeada por paréntesis
  • La subconsulta tiene un alias (que se encuentra después del AS y puede ser cualquiera, «ALIAS» es sólo un ejemplo)
  • En la «CONDICION» debemos usar ese alias de la subconsulta

El patrón de subconsulta a nivel de columna suele ser bastante ineficiente, llevar esta subconsulta a nivel de un JOIN podría mejorar bastante, pero eso dependerá de como tengas configurados los índices.

Este ejemplo es muy sencillo, y solamente sirve para ilustrar el concepto. No es necesario usar una subconsulta para algo tan simple pero está ahí para que se entienda como funciona.

Creamos los datos:

DECLARE @Articulo TABLE (Articulo VARCHAR(100), ArticuloID INT);
DECLARE @EntradaCab TABLE (FechaEnvio DATE, GuiaID INT, TipoGuia INT, BodegaID INT);
DECLARE @EntradaDet TABLE (GuiaID  INT, ArticuloID INT, Cantidad INT);

INSERT INTO @Articulo (Articulo, ArticuloID)
VALUES ('Bolsas',1),('Cajones',2);

INSERT INTO @EntradaCab (FechaEnvio, GuiaID, TipoGuia, BodegaID)
VALUES ('20190101',1,1,1), ('20190201',2,1,1), ('20190301',3,1,1), ('20190401',4,1,1), ('20190501',5,2,2),
('20190601',6,2,2);

INSERT INTO @EntradaDet (GuiaID, ArticuloID, Cantidad)
VALUES (1,1,10), (2,2,25), (3,2,25), (3,2,25), (1,2,25), (2,2,25), (3,2,25)

Obtenemos el total de Articulos por cada Guia:

SELECT
   C.GuiaID,
   C.FechaEnvio,
   C.TipoGuia,
   C.BodegaID,
   D.Articulo,
   D.TotalArticulos
FROM @EntradaCab C
RIGHT JOIN
   (SELECT ED.GuiaID, A.Articulo, SUM(ED.Cantidad) AS TotalArticulos
		FROM @EntradaDet ED
			INNER JOIN @Articulo A ON A.ArticuloID = ED.ArticuloID 
		GROUP BY ED.GuiaID, A.Articulo) AS D
	   ON C.GuiaID = D.GuiaID
ORDER BY C.FechaEnvio, C.GuiaID

Las subconsultas en los JOINs es algo muy bueno porque nos abre muchas de posibilidades. Lo que hay que recordar es que la subconsulta debe estar rodeada por paréntesis y que debemos asignarle un alias. Solamente eso, el resto es igual a los demás JOINs que ya conocemos.

Compara el precio para envíos nacionales e internacionales con hasta un 70% de ahorro.

No Comments Yet.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *