SQL se joint pour récupérer les derniers enregistrements dans des relations un-à-plusieurs
Les requêtes de base de données impliquent souvent de récupérer les entrées les plus récentes à partir de relations un-à-plusieurs. Imaginez une base de données avec des tables « clients » et « achats » ; chaque achat appartient à un seul client. Cette approche récupère efficacement une liste de clients et leurs achats les plus récents à l'aide d'une seule instruction SELECT :
<code class="language-sql">SELECT c.*, p1.* FROM customer c JOIN purchase p1 ON (c.id = p1.customer_id) LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND p1.date < p2.date) WHERE p2.customer_id IS NULL;</code>
Explication :
Optimisation des performances : indexation
Pour des performances optimales, créez un index composite sur la table 'purchase' en utilisant les colonnes '(customer_id, date, id)'. Cela permet des recherches efficaces dans la base de données pour les achats en fonction du client, de la date et de l'identifiant.
Compromis de dénormalisation :
Le stockage de la date du dernier achat dans la table « client » (dénormalisation) peut améliorer les performances pour les requêtes fréquentes de dernier achat. Cependant, cela introduit une redondance des données et des problèmes potentiels d'intégrité.
Clause LIMITE 1 : Une alternative moins fiable
Si les ID de table « achat » sont systématiquement classés par date, l'utilisation de LIMIT 1
dans les sous-requêtes simplifie la requête. Cependant, la fiabilité de cette méthode est moins cohérente que l'approche LEFT OUTER JOIN. La méthode LEFT OUTER JOIN est généralement préférée pour sa robustesse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!