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