SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
JOIN LineItems
ON LineItems.LineItemGUID =
(
SELECT TOP 1 LineItemGUID
FROM LineItems
WHERE OrderID = Orders.OrderID
)
W SQL Server 2005 i nowszych, możesz po prostu zastąpić INNER JOIN
z 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
Pamiętaj, że TOP 1
bez ORDER BY
nie jest deterministyczne:w tym zapytaniu otrzymasz jeden element zamówienia na zamówienie, ale nie jest zdefiniowane, który to będzie.
Wiele wywołań zapytania może dać różne elementy zamówienia dla tego samego zamówienia, nawet jeśli podstawa się nie zmieniła.
Jeśli chcesz deterministycznego porządku, powinieneś dodać ORDER BY
klauzula do najbardziej wewnętrznego zapytania.
Przykład sqlfiddle