Maison >base de données >tutoriel mysql >Comment sélectionner efficacement uniquement le premier élément de campagne pour chaque commande lors de la jonction des tables de base de données ?
Jointures de tables de base de données : sélection uniquement du premier élément de ligne par commande
Dans les opérations de base de données, un défi courant survient lors de la jointure de tables telles que Orders
et LineItems
, où une commande peut avoir plusieurs éléments de campagne associés. Cela entraîne souvent des données redondantes dans l’ensemble de résultats joint. L'objectif est de récupérer efficacement un seul élément de campagne par commande.
Une approche naïve pourrait impliquer l'utilisation de TOP 1
, mais cela peut conduire à des erreurs sans référencement approprié des tables dans les sous-requêtes.
Solutions efficaces : CROSS APPLY
et JOIN
avec ORDER BY
Deux méthodes robustes répondent efficacement à ce problème :
Méthode 1 : Utilisation de CROSS APPLY
Cette approche utilise CROSS APPLY
pour joindre la table Orders
avec une sous-requête qui sélectionne l'élément de ligne supérieur pour chaque commande :
<code class="language-sql">SELECT Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description FROM Orders CROSS APPLY ( SELECT TOP 1 LineItems.Quantity, LineItems.Description FROM LineItems WHERE LineItems.OrderID = Orders.OrderID ) LineItems2;</code>
Méthode 2 : Utiliser JOIN
avec ORDER BY
Cette méthode utilise une clause JOIN
, dans laquelle la condition de jointure sélectionne le LineItemGUID
dans une sous-requête qui classe les éléments de campagne et sélectionne celui du premier pour chaque commande :
<code class="language-sql">SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description FROM Orders JOIN LineItems ON LineItems.LineItemGUID = ( SELECT TOP 1 LineItemGUID FROM LineItems WHERE OrderID = Orders.OrderID ORDER BY LineItemGUID );</code>
Les deux méthodes garantissent qu'un seul élément de campagne est renvoyé pour chaque commande. Surtout, l’inclusion d’une clause ORDER BY
dans la sous-requête est essentielle pour des résultats déterministes. Omettre ORDER BY
avec TOP 1
conduit à des résultats imprévisibles, car le « premier » élément de ligne peut varier selon les exécutions de requêtes. L'utilisation de ORDER BY
garantit une sélection cohérente d'un élément de campagne spécifique en fonction des critères de tri choisis.
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!