具有子查询搜索条件的SQL更新查询

时间:2017-10-18 03:40:39

标签: sql

我有一个家庭作业问题,如果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
        );

但我对于去哪里感到困惑。

1 个答案:

答案 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
        );