Evitar duplicaciones en relaciones uno a muchos
Objetivos
Al terminar podrás distinguir una fila resultante de la cantidad real de copias o alquileres.
Concepto
Una película puede tener varias copias en inventory; una copia puede aparecer en varios registros de rental. Al unir las tres tablas, el resultado tiene una fila por combinación que coincide. Por eso una misma copia puede repetirse en varias filas.
COUNT(i.inventory_id) cuenta apariciones después del JOIN, no necesariamente copias únicas. COUNT(DISTINCT i.inventory_id) cuenta las copias; COUNT(DISTINCT r.rental_id) cuenta alquileres. La clave debe corresponder a la métrica que quieras informar.
Ejemplo
SELECT
f.film_id,
f.title,
COUNT(i.inventory_id) AS rows_after_join,
COUNT(DISTINCT i.inventory_id) AS inventory_copies,
COUNT(DISTINCT r.rental_id) AS rental_records
FROM film AS f
LEFT JOIN inventory AS i
ON i.film_id = f.film_id
LEFT JOIN rental AS r
ON r.inventory_id = i.inventory_id
GROUP BY f.film_id, f.title
ORDER BY rental_records DESC, f.film_id
LIMIT 10;Si rows_after_join supera a inventory_copies, los registros de alquiler repiten copias en el resultado. Para cada indicador usa la clave de la entidad que quieres contar.
Práctica guiada
- Cambia
COUNT(DISTINCT r.rental_id)porCOUNT(r.rental_id)y describe la diferencia. - Quita temporalmente
DISTINCTdeinventory_idy compara la primera y segunda métrica. - Antes de agregar importes, anota qué representa una fila de la unión.
Reto
Resume por film_id el número de copias y alquileres. Incluye ambas métricas, usa las claves correctas y explica qué consulta previa usarías para comprobar que las sumas no se inflan.
Quiz
¿Qué cuenta COUNT(DISTINCT i.inventory_id) en esta consulta?
- A. Las combinaciones de copia y alquiler.
- B. Las copias de inventario con identificadores distintos.
- C. Las películas que no tienen una copia.
Respuesta: B. DISTINCT elimina las repeticiones de la misma copia causadas por el JOIN.
Comprobación
Ya puedes reconocer relaciones que multiplican filas. Ahora aplicarás funciones agregadas a una población y un grano definidos.