2011-10-12 60 views
0

這是我做不理解爲什麼我收到此錯誤

SELECT TOP 5 ContactName FROM Customers 
INNER JOIN [Order Details]ON OrderId = 
CustomerID 
INNER JOIN Orders ON ProductID = OrderID 
WHERE UnitPrice >= 25000 
ORDER BY ContactName ASC 

代碼但是,這是我得到

錯誤
Msg 209, Level 16, State 1, Line 5 
Ambiguous column name 'orderID' 

有人能向我解釋爲什麼我收到此錯誤。

這就是我想要做的是顯示從誰花了超過25,000 $

所以我假設使用順序,產品和客戶的客戶已購買的最近5個訂單。

+1

附加到下面所有的評論,這是不好的做法,有表名,其中包括一個空間。例如'Order Details'應該是'OrderDetails'。 –

+0

那麼這是如何表已名稱dbo。訂單明細,所以我沒有什麼可以做的。 – st1984

回答

1

Order DetailsOrders表中可能有OrderID列,並且SQL Server不知道要採用哪一列。

解決方案:指定要哪一個通過把表名在它前面的使用方法:
Orders.OrderID,而不是僅僅OrderID

所以您的查詢應該是這樣的,那麼:

SELECT TOP 5 ContactName FROM Customers 
INNER JOIN [Order Details]ON Orders.OrderId = 
CustomerID 
INNER JOIN Orders ON ProductID = Orders.OrderID 
WHERE UnitPrice >= 25000 
ORDER BY ContactName ASC 
3

列表OrderID存在於兩個表中。

+2

您試圖將OrderID加入CustomerID和ProductID似乎很奇怪。它們需要與查詢返回結果相同。 –

+0

這就是我想要做的是顯示從誰花了超過25,000個$您 – st1984

1

幾乎可以肯定的是,DetailsOrders表中的字段都是orderID

請用Orders.orderIDDetails.orderID進行說明。

1

在表格中有2個OrderID列。
則可以取消別名(這樣)的歧義或使用Orders.OrderID

SELECT TOP 5 C.ContactName 
FROM 
    Customers C 
    INNER JOIN 
    [Order Details] OD ON C.OrderId = OD.CustomerID 
    INNER JOIN 
    Orders O ON OD.ProductID = O.OrderID 
WHERE O.UnitPrice >= 25000 -- or OD? 
ORDER BY C.ContactName ASC 

注意:你的意思是joion客戶和[訂單明細]喜歡用Customers.OrderId?

+0

通過的意思顧客已購買的最近5號令「但是,這是我得到的錯誤」 – Bala

+0

@Balamurugan K:..呃我複製了太多的問題 – gbn

0

當您在同一個查詢中使用多個表時,您需要區分多個表中具有相同名稱的所有列。否則,查詢引擎如何知道你在談論哪一個?

您可以通過在列名前添加<table name>.<table alias>.來做到這一點。

例如:

SELECT TOP 5 
    C.ContactName 
FROM 
    Customers C -- Customers is aliased as "C" 
INNER JOIN [Order Details] OD ON 
    OD.OrderId = C.CustomerID 
INNER JOIN Orders O ON 
    OD.ProductID = O.OrderID 
WHERE 
    OD.UnitPrice >= 25000 
ORDER BY 
    C.ContactName ASC 

另一個重要的問題...你確定要加入的正確列呢?看起來真的是錯了。

最後,如果這是做家庭作業,請確保您用「家庭作業」標籤標記。

+0

這是什麼,我試圖做的是從顯示誰花了超過25,000個$ – st1984

+0

已經花費了超過$ 25,000一個項目一個客戶所購買的最近五年的訂單?在一個命令?在所有時間?在過去的一年?無論如何,我認爲這裏的一些答案正確地解釋了與這個問題有關的問題。如果您仍然遇到與您的查詢相關的其他問題,請爲這些問題創建一個新問題。 –

+0

我假設整個時間... – st1984

0

在您對OrderId的引用中,您需要計算出您要從哪個表中提取orderId列。 (在某些情況下,您可以選擇任一表格)。我們打電話給那張桌子。

在您的查詢,以.orderId取代的orderId。

相關問題