2013-07-21 6 views
0

У меня есть таблицы T1 и T2. Я хочу обновить четвертый coloumn в T2 от T1. Задайте вопросОшибка запроса на обновление запроса

update t1 
set t1.price=(select price from (select t1.price 
          from t2 
          where t1.customer=t2.customer and t1.sku=t2.sku and 
            t1.weekno= t2.weekno) where rownum=1) 

Но это ошибка ошибки неверный идентификатор t1.weekno. Я попробовал пару других способов, но каждый раз, когда сталкиваюсь с одной и той же проблемой. Буду признателен вам, если вы сможете мне помочь. Спасибо

P.S: Мы имеем дело с 5 миллионами записей.

ответ

1

Проблемы с запросом вы ссылками t1.price в вашем заявлении выберите в ваших коррелированных подзапросах. Есть несколько способов решить эту проблему.

Одним из вариантов является использование MERGE для этого:

merge 
into t1 
using (
     select t1.customer as updatedCustomer, t2.sku updatedsku, t2.weekno updatedweekno, t2.price updatedPrice 
     from t1 
      join t2 
       on  t1.customer = t2.customer and t1.sku=t2.sku and 
           t1.weekno= t2.weekno 
     ) 
on  (customer = updatedCustomer and sku = updatedsku and weekno = updatedweekno) 
when matched then 
update 
set  price = updatedPrice; 

В качестве альтернативы, вы можете обновить связанный подзапрос использовать t2.price:

update t1 
set price = (select t2.price 
      from t2 
      where t1.customer=t2.customer and t1.sku=t2.sku and 
           t1.weekno= t2.weekno and rownum = 1) 
+0

Спасибо, но мы говорим о 50 миллионах строк. Будет ли он работать быстрее? – raka

+1

@RAVIKANTHREDDYGUDIPATI - не уверен, что я мог бы ответить на этот вопрос, не зная больше о ваших структурах таблиц, индексах и планах EXPLAIN. Я бы подумал, что оператор 'MERGE' будет иметь лучшую производительность, так как он использует стандартный' JOIN'. Обычно я предлагаю избегать коррелированных подзапросов. Лучшее предложение, попробуйте и посмотрите, что лучше всего работает. – sgeddes

0

Вы должны добавить t1 к из пункта подзапроса:

select t1.price 
          from t1,t2 
          where t1.customer=t2.customer and t1.sku=t2.sku and 
            t1.weekno= t2.weekno 
+0

I угадать его работу, но не может подтвердить это ... поскольку есть миллионы записей, но запрос запущен .... – raka

+0

вы можете предложить любой оптимизированный способ сделать выше. Как использовать конструкции «Join»? – raka

Смежные вопросы