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