2016-12-09 1 views
0

Je n'arrive pas à faire fonctionner ça ... Des idées?Mise à jour SQL avec jointure interne et compte

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 

Un agrégat peut ne pas apparaître dans la clause WHERE à moins qu'elle ne se trouve dans une sous-requête contenue dans une clause HAVING ou une liste de sélection, et la colonne étant agrégées est une référence externe.

Merci

+0

Dire "Je n'arrive pas à faire marcher ça ..." n'est pas très utile. Décrivez le problème, ou mieux encore, postez le message d'erreur. – Tony

+0

Avez-vous essayé avec la clause Having? – Hari

+0

@Hari oui, pas de chance d'avoir – arielsp

Répondre

3

Essayez ceci:

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

Utilisez HAVING clause au lieu de WHERE dans votre requête

3

probablement quelque chose comme ça, dépend de votre SGBDR, vous devez marquer cette conséquence

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

Peut être fait avec out 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