2016-11-29 2 views
1

Я пытаюсь создать запрос, основанный на попытке найти значение в одном столбце таблицы на основе значений другого столбца в другой таблице. Это код, который я написал до сих пор,Неоднозначное название столбца Даже если имя столбца и таблица объявлены?

SELECT OrderDetails.OrderDetailID FROM OrderDetails 
INNER JOIN OrderDetails 
ON Products.ProductID = OrderDetails.ProductID 
WHERE Products.SupplierID="5"; 

Выполняя код, я хочу, чтобы найти OrderDetailID из строки в таблице КодЗаказа где SupplierID в таблице продуктов 5. Например,

Highlighted Products Table

SupplierID из «Queso Кабралес» является 5 и его ProductID равна 11. Это соответствует внешнему ключу в таблице OrderDetail 11, и поэтому я хочу, чтобы первичный ключ этой строки должны быть возвращены. В этом случае 1.

Highlighted OrderDetails Table

На данный момент я получаю ошибку «неоднозначное имя столбца» в первой строке, даже если я объявил как таблицу и имя столбца. Кроме того, как я хотел попросить SQL получить данные о других таблицах. Я знаю, что я не хочу использовать «INNER JOIN», но как я могу выполнить команду WHERE.

+1

Вы '' JOIN'ing OrderDetails' к '' OrderDetails' на Products.ProductId'. Возможно, вы хотели сделать 'JOIN' на' OrderDetails' и 'Продукты' вместо этого? – Siyual

ответ

1

У вас есть OrderDetails дважды в статье FROM, но нет Products. Я думаю, что вы имели в виду:

SELECT od.OrderDetailID 
FROM OrderDetails od INNER JOIN 
    Products p 
    ON p.ProductID = od.ProductID 
WHERE p.SupplierID = 5; 

Примечания:

  • Таблица псевдонимами сделать запрос легче читать и писать (в od и p).
  • Не используйте разделители вокруг числовых констант. Я предполагаю, что SupplierId - это число, поэтому я удалил двойные кавычки.
+1

Особенно понравился добавленный комментарий об удалении цитат, если это не нужно. Способ решить всю проблему, а не только базовый вопрос. – xQbert

0

Вы используете два раз тот же столбец, так что вы должны resove в amvbiguity, например: таким образом (используя два различных псевдонима OD1, OD2)

SELECT od1.OrderDetailID FROM OrderDetails od1 
    INNER JOIN OrderDetails as od2 
    ON Products.ProductID = od2.ProductID 
    WHERE Products.SupplierID="5"; 
+0

, но тогда 'products.productID' потерпит неудачу: P как и' products.supplierID' Я думаю, что они хотели использовать продукты один раз. – xQbert

+0

Я не в логике запроса .. но двусмысленность связана с тем, что ОП используют два раза одну и ту же таблицу .. без правильного псевдонима .. – scaisEdge

0

Одной из проблем является то, что INNER JOIN был разработан для создания дубликата столбцов в результате. Эта проблема была решена в 1992 году, когда стандарт SQL ввел типа «реляционная» Join, которые не создают повторяющиеся атрибуты:

SELECT OrderDetailID 
    FROM OrderDetails 
     NATURAL JOIN Products 
WHERE SupplierID = 5; 
Смежные вопросы