我正在尝试基于尝试根据另一个表中另一列的值在表的一列中查找值来创建查询。这是我到目前为止编写的代码,
SELECT OrderDetails.OrderDetailID FROM OrderDetails
INNER JOIN OrderDetails
ON Products.ProductID = OrderDetails.ProductID
WHERE Products.SupplierID="5";
通过执行代码,我想找到OrderID表中行的OrderDetailID,其中Products表中的SupplierID是5.例如,
" Queso Cabrales"的供应商ID是5并且其ProductID是11.这对应于表OrderDetail中的外键11,因此我希望返回该行的主键。在这种情况下1。
Highlighted OrderDetails Table
目前,我得到一个不明确的专栏名称"即使我已经声明了表和列名称,第一行中的错误。另外,我是如何让SQL获取有关其他表的数据的。我知道我有意使用" INNER JOIN"但是如何执行以便可以使用WHERE命令。
答案 0 :(得分: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 :(得分:0)
你使用两次相同的列,所以你必须重新调整amvbiguity,例如:这样(使用两个不同的别名od1,od2)
SELECT od1.OrderDetailID FROM OrderDetails od1
INNER JOIN OrderDetails as od2
ON Products.ProductID = od2.ProductID
WHERE Products.SupplierID="5";
答案 2 :(得分:0)
一个问题是INNER JOIN
旨在在结果中生成重复的列。这个问题在1992年SQL标准引入'关系'加入不会生成重复属性的类型:
SELECT OrderDetailID
FROM OrderDetails
NATURAL JOIN Products
WHERE SupplierID = 5;