尽管列名和表已声明,但是模板列名称不明确?

时间:2016-11-29 19:31:59

标签: sql join inner-join

我正在尝试基于尝试根据另一个表中另一列的值在表的一列中查找值来创建查询。这是我到目前为止编写的代码,

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

通过执行代码,我想找到OrderID表中行的OrderDetailID,其中Products表中的SupplierID是5.例如,

Highlighted Products Table

" Queso Cabrales"的供应商ID是5并且其ProductID是11.这对应于表OrderDetail中的外键11,因此我希望返回该行的主键。在这种情况下1。

Highlighted OrderDetails Table

目前,我得到一个不明确的专栏名称"即使我已经声明了表和列名称,第一行中的错误。另外,我是如何让SQL获取有关其他表的数据的。我知道我有意使用" INNER JOIN"但是如何执行以便可以使用WHERE命令。

3 个答案:

答案 0 :(得分:1)

OrderDetails子句中有两次FROM但没有Products。我想你的意思是:

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

注意:

  • 表别名使查询更易于编写和阅读(odp)。
  • 不要在数字常量周围使用分隔符。我假设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;