具有内部联接和计数的SQL更新

时间:2016-12-09 22:05:17

标签: sql

我不能让这个工作......任何想法?

update Products
set UnitPrice = UnitPrice * 0.9
from Products p
inner join [Order Details] od
on p.ProductID = od.ProductID
where COUNT(p.ProductID) > 50

聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用。

由于

4 个答案:

答案 0 :(得分:3)

试试这个:

update p
set UnitPrice = UnitPrice * 0.9
from Products p
inner join (
    select ProductID
    from [Order Details]
    group by ProductID
    having count(*) > 50
    ) as od
on od.ProductID = p.ProductID

答案 1 :(得分:3)

可能是这样的,取决于你的rdbms,你应该相应地标记

update Products set UnitPrice = UnitPrice * 0.9
where ProductID in (
    select ProductID from [Order Details]
    group by ProductID
    having count(*) > 50)

答案 2 :(得分:0)

在查询中使用HAVING子句代替WHERE

答案 3 :(得分:0)

可以在没有JOIN的情况下完成:

update Products set UnitPrice = UnitPrice * 0.9
from ( select ProductID
    from [Order Details]
    group by ProductID
    having count(*) > 50 ) a 
where Product.ProductID=a.ProductID