구체적이지만 가설적인 예를 사용하겠습니다.
각 주문 에는 일반적으로 하나의 광고 항목 만 있습니다 .
명령:
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, ...
그래서 문제는
- "중복"행 제거
- 중복을 피하기 위해 행 중 하나에 만 조인
첫번째 시도
첫 순진한 시도는 " TOP 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
그러나 오류가 발생합니다.
열 또는 접두사 'Orders'가 쿼리에 사용 된
테이블 이름 또는 별명과 일치 하지 않습니다
.
내부 선택에 외부 테이블이 표시되지 않기 때문일 수 있습니다.
group by
중복을 원하지 않는 열을 제외하고 다른 모든 열을 나열해야 한다고 생각 합니다. 출처
group by
?