【发布时间】:2023-03-16 13:40:01
【问题描述】:
我有一个数据库,其中包含特定项目的食谱。我想创建一个更新语句,根据配方中成分的成本更新所有项目成本。我相信我正在处理的问题是成分和使用它们的物品的价值“成本”位于同一张表中。我已经设法写了一个声明,它只更新了一个项目的成本,但我似乎无法让它适用于所有有配方的项目。附件是一个项目的功能声明和我试图为所有项目撰写的声明。
这是返回正确值的语句,但仅适用于一个特定的项目编号。
UPDATE inventory
SET inventory.cost = (SELECT SUM(inventory_ingredients.quantity * inventory.cost)
FROM inventory_ingredients, inventory
WHERE inventory.itemnum = inventory_ingredients.ingredient
AND inventory_ingredients.itemnum = 'BeesKnees1200'
GROUP BY inventory_ingredients.itemnum)
WHERE inventory.itemnum = 'BeesKnees1200'
这是我试图编写的语句,它将使用该 SUM 更新所有 Inventory.Cost
UPDATE inventory
SET inventory.cost = (SELECT SUM(inventory_ingredients.quantity * inventory.cost)
FROM inventory_ingredients, inventory
WHERE inventory.itemnum = inventory_ingredients.ingredient
GROUP BY inventory_ingredients.itemnum)
WHERE inventory.itemnum = Inventory_ingredients.itemnum
在这种情况下,我在inventory_ingredients.itemnum 上得到“无法绑定”
我认为这里的问题是我引用了同一列两次,但我不确定如何更正它。任何想法都将不胜感激。
所附图片分别显示了 Inventory 和 Inventory_Ingredients 表的相关列。
【问题讨论】:
-
你需要在那里使用 CTE
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 多年前),不鼓励使用它 -
@marc_s 我非常感谢您的建议。我刚开始学习 SQL,没有接受过正规教育,所以我喜欢专业人士的建议;但是,那里的链接似乎不想打开。我还能在哪里看到您所引用的任何想法?
标签: sql sql-server tsql