2017-10-18 85 views
0

我有一个家庭作业问题,我们需要编写UPDATE语句来更改Ass7中类别的名称,方法是删除其最后两个字符,如果dbo架构中的类别产品的平均单价高于$ 30, Ass7是我们制作的一个数据库,其中包含相关表类别和产品。类别表具有类别名称,而产品表格具有单位价格,每个产品都具有类别标识。我正在尝试这样的事情带有子查询搜索条件的SQL更新查询

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

我开始想我可能需要使用HAVING子句而不是像我这样的子查询,但我不太确定如何继续。 –

+0

你可以用http://sqlfiddle.com/复制你的问题吗?如果可以,请编辑您的问题添加链接到您的问题 – am05mhz

+1

标记您正在使用的dbms。 – jarlh

回答

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