Sql 即使声明了列名和表,列名还是不明确?

Sql 即使声明了列名和表,列名还是不明确?,sql,join,inner-join,Sql,Join,Inner Join,我正在尝试创建一个查询,该查询基于尝试根据另一个表中另一列的值在表的一列中查找值。这是我到目前为止写的代码 SELECT OrderDetails.OrderDetailID FROM OrderDetails INNER JOIN OrderDetails ON Products.ProductID = OrderDetails.ProductID WHERE Products.SupplierID="5"; 通过执行代码,我希望在OrderID表中查找行的OrderDetailID,其中P

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

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,产品ID为11。这对应于OrderDetail表11中的外键,因此我希望返回该行的主键。在这种情况下1


目前,我在第一行中得到了一个“不明确的列名”错误,尽管我已经声明了表和列名。另外,我如何要求SQL获取有关其他表的数据。我知道我不打算使用“内部连接”,但我如何执行才能使用WHERE命令

您在
FROM
子句中有两次
OrderDetails
,但没有
产品。我想你的意思是:

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

  • 表别名使查询更易于编写和读取(od
    od
    p
  • 不要在数字常量周围使用分隔符。我假设
    SupplierId
    是一个数字,所以我删除了双引号

    • 您使用的是两次相同的列,因此必须解析AMV图形,例如:通过这种方式(使用两个不同的别名od1、od2)


      一个问题是
      internaljoin
      被设计为在结果中生成重复的列。1992年,当SQL标准引入了不会生成重复属性的“关系”连接类型时,这个问题得到了解决:

      SELECT OrderDetailID
        FROM OrderDetails 
             NATURAL JOIN Products
       WHERE SupplierID = 5;
      

      您将
      加入
      Products.ProductId
      上的
      OrderDetails
      OrderDetails
      。也许你想在
      OrderDetails
      Products
      上加入
      JOIN
      ?但是
      Products.productID
      会失败:P就像
      Products.supplierID
      一样,我想他们打算使用一次产品。我不在查询的逻辑中。但这种模糊性与OP使用两个产品的事实有关使用相同的表计时..没有正确的别名..尤其像添加的关于删除引号(如果不必要)的注释。解决整个问题的方法,而不仅仅是基本问题。
      SELECT OrderDetailID
        FROM OrderDetails 
             NATURAL JOIN Products
       WHERE SupplierID = 5;