SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
JOIN LineItems
ON LineItems.LineItemGUID =
(
SELECT TOP 1 LineItemGUID
FROM LineItems
WHERE OrderID = Orders.OrderID
)
В SQL Server 2005 и по-нови, можете просто да замените INNER JOIN
с 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
Моля, имайте предвид, че TOP 1
без ORDER BY
не е детерминистична:с тази заявка ще получите по един ред на поръчка, но не е дефинирано коя ще бъде.
Множеството извиквания на заявката могат да ви дадат различни договорени позиции за една и съща поръчка, дори ако основната не се е променила.
Ако искате детерминиран ред, трябва да добавите ORDER BY
клауза към най-вътрешната заявка.
Пример sqlfiddle