开发者

Not understanding why I am getting this error

开发者 https://www.devze.com 2023-04-13 01:25 出处:网络
This is the code I did SELECT TOP 5ContactName FROM Customers INNER JOIN [Order Details]ON开发者_高级运维 OrderId =

This is the code I did

  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

But this is the error I am getting

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

Can someone explain to me why I am getting this error.

This is what I am trying to do is show the most recent five orders that were purchased from a customer who has spent more than $25,000

So i am assuming to use order,product,and customer.


The column OrderID exists in both tables.


There is probably an OrderID column in both your Order Details and your Orders table, and SQL Server doesn't know which one to take.

Solution: specify which one you want to use by putting the table name in front of it:
Orders.OrderID instead of just OrderID

So your query would look like this then:

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


Almost certainly you have the field orderID in both the Details and the Orders table.

Clarify it with either Orders.orderID or Details.orderID.


There are 2 OrderID columns across the tables.
You can remove the ambiguity with aliases (like this) or use 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

Note: did you mean to joion Customers and [Order Details] like using Customers.OrderId?


When you JOIN multiple tables in the same query, you need to differentiate any columns which have the same name in multiple tables. Otherwise, how would the query engine know which one you're talking about?

You can do this either by prefixing the column name with <table name>. or <table alias>..

For example:

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

Another important question... are you sure that you're joining on the correct columns there? It looks really wrong.

Finally, if this is for a homework assignment, please make sure that you tag it as such with the "homework" tag.


In your references to OrderId, you need to figure out which table you are pulling the orderId column from. (In some cases, you can just pick either table). Let's call that table .

In your query, replace orderId with .orderId.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号