новичок sql вопрос pt.2 ошибка ora-00933 SQL-команда неправильно завершена - PullRequest
0 голосов
/ 18 февраля 2011

Я должен обновить свои таблицы для моего назначения в СУБД. Не могу понять, почему я получаю эту ошибку.

  UPDATE Customers
  SET CreditLimit = CreditLimit * 1.25
      FROM(SELECT *
           FROM Orders
           WHERE Amount > 250
           HAVING COUNT(*) >= 2);

Есть идеи?

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

В операторе update нет предложения from, как вы указали.
Вы пытаетесь сделать что-то вроде этого: Увеличьте кредитный лимит на 25% для клиентов, у которых есть хотя бы 2заказы на более чем 250 денег .

update Customers
   set CreditLimit = CreditLimit * 1.25
 where (select count(*)
          from Orders
         where Amount > 250
           and orders.customer_id = Customers.customer_id)) >= 2;

Edit
Я только что заметил, что вы используете Oracle (сообщение ORA).Поскольку вы потенциально обновляете всех клиентов, я считаю, что наиболее эффективный способ - использовать «обновляемое соединение» или оператор слияния, как показано ниже:

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;
1 голос
/ 18 февраля 2011
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);

или

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
...