【问题标题】:Invalid Column Name with INNER JOIN and Multiple Tables具有 INNER JOIN 和多个表的无效列名
【发布时间】:2017-04-25 03:16:04
【问题描述】:

我目前正在用 SQL 编写一个存储过程来打印多个表的结果以查找购买的前十名产品,但我收到语法错误

“列名'ProductID'无效”。

这出现在 sod.ProductID 的第二个 INNER JOIN 语句中

下面是我的代码

CREATE PROCEDURE usp_top10ProfitableProducts
AS
BEGIN 
    SELECT TOP 10 sp.StoreProductID, sup.ProductName, sum(sod.Quantity) AS quantitysold, (sum(sod.Quantity) * sum(sod.unitPrice)) - (sum(sod.Quantity) * sum(sp.costPrice)) AS Profit
FROM SalesOrderDetails sod
INNER JOIN StoreProduct sp ON sp.StoreProductID = sod.StoreProductID
INNER JOIN SupplierProduct sup ON sup.ProductID = sod.ProductID
WHERE Quantity > 0
END

提前致谢。

编辑** 下面也是我的实体关系图。 “ProductID”位于“SupplierProduct”中

【问题讨论】:

  • SalesOrderDetails 中是否有 ProductID 列?
  • 没有 StoreProductID"SalesOrderDetails sod" 也没有 ProductID
  • 我认为你的表结构不足以得到结果查询..
  • 不,SalesOrderDetails 中没有 ProductID。但我认为 INNER JOIN 不会连接这些表。或者这不是内部连接的工作原理?
  • storeproductidsupplierproductid 是否相互一致?对于任何给定项目,storeproductsupplierproduct 表中的 id 是否相同?

标签: mysql sql database tsql ssms


【解决方案1】:

可能其中一个表中不存在该字段。还有一点:group by 不见了。

GROUP BY sp.StoreProductID, sup.ProductName

【讨论】:

  • 是的,我终于补充了。仍然没有解决我的问题。无论如何,谢谢.. :)
【解决方案2】:

要在两个表之间进行连接,连接列(在上述情况下为 ProductID)应该在两个表中都可用,否则 sql 将无法进行连接。 根据表结构 SalesOrderDetails 没有列 ProductID 这就是它给出错误的原因,您需要加入各个表中存在的 cloumns

【讨论】:

  • 谢谢。数据库已更新并且正在运行。谢谢
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 2015-04-28
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多