这是我做的代码
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美元的客户处购买的最近五个订单
所以我假设使用订单,产品和客户。
答案 0 :(得分:3)
两个表中都存在OrderID
列。
答案 1 :(得分:1)
您肯定在orderID
和Details
表格中都有字段Orders
。
使用Orders.orderID
或Details.orderID
澄清它。
答案 2 :(得分:1)
OrderID
和Order Details
表中可能都有Orders
列,而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 :(得分: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和[Order Details]就像使用Customers.OrderId一样?
答案 4 :(得分:0)
当您在同一查询中JOIN
多个表时,需要区分多个表中具有相同名称的任何列。否则,查询引擎将如何知道您正在谈论哪一个?
您可以通过在列名称前添加<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
另一个重要问题......你确定你正在加入正确的列吗?看起来真的错误。
最后,如果这是作业作业,请确保使用“作业”标签将其标记为。
答案 5 :(得分:0)
在对OrderId的引用中,您需要确定从哪个表中提取orderId列。 (在某些情况下,您可以选择任一表格)。我们打电话给那张桌子。
在您的查询中,将orderId替换为.orderId。