sql >> Database >  >> RDS >> Sqlserver

Hoe lid te worden van de eerste rij

SELECT   Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM     Orders
JOIN     LineItems
ON       LineItems.LineItemGUID =
         (
         SELECT  TOP 1 LineItemGUID 
         FROM    LineItems
         WHERE   OrderID = Orders.OrderID
         )

In SQL Server 2005 en hoger kunt u gewoon INNER JOIN . vervangen met CROSS APPLY :

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

Houd er rekening mee dat TOP 1 zonder ORDER BY is niet deterministisch:met deze zoekopdracht krijgt u één regelitem per bestelling, maar het is niet gedefinieerd welke het zal zijn.

Meerdere aanroepen van de zoekopdracht kunnen u verschillende regelitems voor dezelfde bestelling opleveren, zelfs als de onderliggende waarde niet is gewijzigd.

Als u een deterministische volgorde wilt, moet u een ORDER BY . toevoegen clausule toe aan de binnenste vraag.

Voorbeeld sqlfiddle



  1. Database importeren naar MySQL of MariaDB

  2. Hoe RLIKE werkt in MariaDB

  3. Hoe PII te vinden en te maskeren in Elasticsearch

  4. Foutcode 1292 - Afgekapte onjuiste DUBBELE waarde - Mysql