Question SQL débutante Pt.2 Erreur ORA-00933 SQL Commande non correctement terminée

StackOverflow https://stackoverflow.com/questions/5043100

  •  15-11-2019
  •  | 
  •  

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?

Était-ce utile?

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
scroll top