Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有子查询搜索条件的SQL更新查询_Sql - Fatal编程技术网

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

具有子查询搜索条件的SQL更新查询,sql,Sql,我有一个家庭作业问题,如果dbo模式中的类别产品的平均单价超过30美元,我们需要编写一个UPDATE语句,通过删除其最后两个字符来更改Ass7中类别的类别名称。 Ass7是一个由数据库组成的模式,其中包含相关的表、类别和产品。Categories表有Categories Name,Products表有单价,每个产品都有Categories ID UPDATE Ass7.Categories SET CategoryName = LEFT(CategoryName, (LEN(CategoryNa

我有一个家庭作业问题,如果dbo模式中的类别产品的平均单价超过30美元,我们需要编写一个UPDATE语句,通过删除其最后两个字符来更改Ass7中类别的类别名称。 Ass7是一个由数据库组成的模式,其中包含相关的表、类别和产品。Categories表有Categories Name,Products表有单价,每个产品都有Categories 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
        );

但是我很困惑,不知道该去哪里。

我认为你把问题复杂化了。您只需要一个子查询,返回avgunit_price>30的产品的类别id,如下所示

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

我开始认为我可能需要使用HAVING子句,而不是像我现在这样使用子查询,但我不太确定如何继续。你能用HAVING复制你的问题吗?如果可以,请编辑您的问题并将链接添加到您的问题标记您正在使用的dbms。您使用的是哪种产品?博士后?神谕SQL只是一种查询语言,而不是特定数据库产品的名称。