sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man går med i första raden

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

I SQL Server 2005 och senare kan du bara ersätta INNER JOIN med 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

Observera att TOP 1 utan ORDER BY är inte deterministisk:denna fråga får du en rad per beställning, men det är inte definierat vilken det ska vara.

Flera anrop av frågan kan ge dig olika rader för samma beställning, även om det underliggande inte har ändrats.

Om du vill ha deterministisk ordning bör du lägga till en ORDER BY klausul till den innersta frågan.

Exempel sqlfiddle



  1. Hur man beräknar skillnaden mellan två datumtider i T-SQL

  2. Följ med mig tisdagen den 9 april för de senaste Microsoft Access-nyheterna

  3. Hur man konfigurerar AppArmor för MySQL-baserade system (MySQL/MariaDB Replication + Galera)

  4. 3 sätt att kontrollera kolumndatatyp i Oracle