Maison >base de données >tutoriel mysql >Comment limiter les jointures SQL à la première ligne d'une table associée uniquement ?
Restriction des jointures SQL à la première ligne associée
Joindre efficacement plusieurs tables en SQL est crucial, mais parfois nous n'avons besoin que de la première ligne d'une table associée. Cet article montre comment limiter une jointure à une seule ligne, en évitant les lignes en double lorsqu'il s'agit de relations un-à-plusieurs.
Examinons un scénario courant :
Nous avons deux tables, Orders
et LineItems
. Même si la plupart des campagnes comportent un seul élément de campagne, certaines peuvent en comporter plusieurs. Un INNER JOIN
standard entraînerait des lignes de commande en double s'il existe plusieurs éléments de campagne.
Pour éviter cela, nous limiterons la jointure à la première LineItems
ligne par commande. Voici deux méthodes efficaces :
Utilisation de CROSS APPLY (SQL Server 2005 et versions ultérieures) :
Cette approche offre une solution plus propre et plus lisible :
<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>
Utilisation d'une jointure interne avec une sous-requête (SQL Server antérieur à 2005) :
Pour les anciennes versions de SQL Server, cette méthode permet d'obtenir le même résultat :
<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 )</code>
Considération importante : TOP 1
sans ORDER BY
donne des résultats non déterministes. Pour sélectionner de manière cohérente une ligne spécifique, incluez toujours une clause ORDER BY
dans la requête interne pour spécifier les critères de tri souhaités.
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!