我有一个家庭作业问题,如果dbo架构中的类别产品的平均单价高于30美元,我们需要编写UPDATE
语句来更改Ass7中类别的类别名称,方法是删除其最后两个字符。
Ass7是一个Schema,我们用一个数据库组成,它有相关的表Categories和Products。 Categories表具有Category Name,Products表具有单价,每个产品都有一个类别ID。我正在尝试这样的事情
UPDATE Ass7.Categories
SET CategoryName = LEFT(CategoryName, (LEN(CategoryName) - 2))
WHERE EXISTS (
SELECT CategoryID
,AVG(UnitPrice) AS average
FROM Ass7.Categories
INNER JOIN dbo.Products ON Ass7.Categories.CategoryID = dbo.Products.CategoryID
WHERE average > 30
GROUP BY Ass7.Categories.CategoryID
);
但我对于去哪里感到困惑。
答案 0 :(得分:1)
我认为你的查询过于复杂。您只需要一个返回category_id
产品having avg(unit_price) > 30
的子查询,如下所示。
UPDATE Ass7.Categories
SET CategoryName = LEFT(CategoryName, (LEN(CategoryName) - 2))
WHERE CategoryID IN(
SELECT p.CategoryID
FROM dbo.Products p
GROUP BY p.CategoryID
having AVG(p.UnitPrice) > 30
);