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 e versioni successive, potresti semplicemente sostituire INNER JOIN
con 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
Tieni presente che TOP 1
senza ORDER BY
non è deterministico:questa query ti darà un elemento pubblicitario per ordine, ma non è definito quale sarà.
Chiamate multiple della query possono darti elementi pubblicitari diversi per lo stesso ordine, anche se il sottostante non è cambiato.
Se vuoi un ordine deterministico, dovresti aggiungere un ORDER BY
clausola alla query più interna.
Esempio sqlfiddle