Question SQL débutante Pt.2 Erreur ORA-00933 SQL Commande non correctement terminée
Question
Je dois mettre à jour mes tables pour mon affectation en SGBD. Je ne peux pas comprendre pourquoi j'obtiens cette erreur.
UPDATE Customers
SET CreditLimit = CreditLimit * 1.25
FROM(SELECT *
FROM Orders
WHERE Amount > 250
HAVING COUNT(*) >= 2);
Des idées?
La solution
La update
La déclaration n'a pas de from
clause, comme vous avez spécifié.
Essayez-vous de faire quelque chose comme ceci:Augmenter la limite de crédit de 25% pour les clients qui ont au moins 2 commandes pour plus de 250 argent.
update Customers
set CreditLimit = CreditLimit * 1.25
where (select count(*)
from Orders
where Amount > 250
and orders.customer_id = Customers.customer_id)) >= 2;
Éditer
Je viens de remarquer que vous utilisez Oracle (le message ORA). Étant donné que vous mettez potentiellement à la mise à jour tous les clients, je pense que le moyen le plus performant serait d'utiliser une "jointure à jour", ou une déclaration de fusion comme ci-dessous:
merge
into customers
using (select customer_id
from Orders o
where amount > 250
group
by customer_id
having count(*) >= 2
) orders
on(customers.customer_id = orders.customer_id)
when matched then
update
set customers.creditlimit = customers.creditlimit * 1.25;
Autres conseils
UPDATE Customers
SET CreditLimit = CreditLimit * 1.25
FROM Customers
Where Id in (
select CustomerId
from orders
where Amount > 250
Group By CustomerId
HAVING COUNT(*) >= 2);
ou
UPDATE Customers
SET CreditLimit = CreditLimit * 1.25
FROM Customers c
Where (select count(*) from orders o where o.CustomerId = c.Id And Amount > 250) > =2
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow