SQL Server: как присоединиться к первой строке
Я буду использовать конкретный, но гипотетический пример.
каждыйпорядок обычно есть только одинпозиция:
Заказы:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
Позиции:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
Но иногда будет заказ с двумя позициями:
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
Обычно при отображении заказов пользователю:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
Я хочу показать один элемент в заказе. Но с этим случайным заказом, содержащим два (или более) товара, заказыпоявиться бытьдублируется:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 spurving bearing
KSG-0619-81 5 panametric fan
KSG-0619-81 5 differential girdlespring
Что я действительно хочу, так это иметь SQL Serverпросто выберите одинкак будетдостаточно хорошо:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan
Если я предприму приключение, я мог бы показать пользователю многоточие, чтобы указать, что их больше одного:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan, ...
Так что вопрос в том, как
устранить "дублирующиеся" строкитолько присоединиться к одной из строк, чтобы избежать дублированияПервая попыткаМоей первой наивной попыткой было присоединиться только кТОП 1" позиции:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN (
SELECT TOP 1 LineItems.Quantity, LineItems.Description
FROM LineItems
WHERE LineItems.OrderID = Orders.OrderID) LineItems2
ON 1=1
Но это дает ошибку:
Столбец или префикс «Заказы» не
совпадать с именем таблицы или псевдонимом
используется в запросе.
Предположительно, потому что внутренний выбор не видит внешнюю таблицу.