Maison >base de données >tutoriel mysql >Comment limiter les jointures SQL à la première ligne d'une table associée uniquement ?

Comment limiter les jointures SQL à la première ligne d'une table associée uniquement ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-17 06:08:09829parcourir

How to Limit SQL Joins to Only the First Row of a Related Table?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn