2016-12-09 6 views
0

Я не могу заставить это работать ... Любые идеи?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 или список выбора, а колонна агрегируются является внешней ссылкой.

Благодаря

+0

Говорить «Я не могу заставить это работать ...» не очень полезно. Опишите проблему или еще лучше опубликуйте сообщение об ошибке. – Tony

+0

Вы попробовали с помощью предложения? – Hari

+0

@ Хэри да, не повезло с наличием – arielsp

ответ

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 
0

Используйте HAVING пункт вместо WHERE в запросе

3

вероятно, что-то вроде этого, зависит от РСУБД, вы должны пометить это соответственно

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

Можно сделать с помощью out:

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 
Смежные вопросы