Hack: Usar "UNION" para minimizar el ancho de banda en "JOIN"s
Muchas veces al usarse JOINs traemos datos repetidos, y eso algunas veces es exagerado. Podemos usar UNION para minimizar el ancho de banda cuando se trabaje con uno o varios JOINs en una consulta. Para la demostración se usará las tablas Products y Categories de la histórica y muy conocida base de datos Northwind.
Bien, la siguiente consulta traerá las columnas (CategoryID, CategoryName, Description) de la tabla Categories y las columnas ProductID, ProductName y QuantityPerUnit de sus productos asociados. Para esto tenemos:
SELECT c.categoryid, c.categoryname, c.description,
p.productid, p.productname, p.quantityperunit
FROM products AS p
INNER JOIN categories c
ON p.categoryid = c.categoryid
WHERE c.categoryname = 'Seafood'
ORDER BY c.categoryid, p.productid
Los resultados podemos verlo así:
Vemos en los resultados que se repiten demasiados datos... ¿Qué hacer para mejorar la consulta?, una alternativa es transformar la consulta anterior usando UNION, en algo mucho mejor y razonable, para obtener esto:
La consulta debe ser así:
SELECT 'Categoria' AS tipofila,
c.categoryid, c.categoryname, c.description
FROM categories c
WHERE c.categoryname = 'Seafood'
UNION ALL
SELECT 'Productos' AS tipofila,
p.productid, p.productname, p.quantityperunit
FROM categories c
INNER JOIN products p
ON p.categoryid = c.categoryid
WHERE c.categoryname = 'Seafood'
ORDER BY tipofila
Aquí se está haciendo un uso óptimo del ancho de banda porque no hay datos repetidos para alguna columna de valores grandes, es más, la columnas "TipoFila" es opcional, pudiéndose optar por desecharlo, y entendiendo que la primera fila sería para los datos de la categoria.
Saludos Cordiales!,