2016-03-29 4 views
0

у меня есть этот оператор обновленияОбновление с несколькими таблицами и оптимизации запросов

UPDATE 
    pr 
    SET 
    pr.ult_prezzo_euro = ROUND(pr.ult_prezzo/fs.cambio,7) 
    FROM --error SQL COMMAND NOT PROPERLY ENDED 
    fin_prodotto prod INNER JOIN 
    fin_prodotto_linea fpl ON prod.prodotto_id=fpl.prodotto_id INNER JOIN 
    fin_att_fin faf ON fpl.attivita_fin_id=faf.attivita_fin_id INNER JOIN 
    fin_prezzo pr ON pr.attivita_fin_id=faf.attivita_fin_id INNER JOIN 
    flx_sec_posizione_dt_upd fs ON pr.attivita_fin_id=fs.attivita_fin_id 
    where 
     prod.prodotto_id=43 
    and faf.codice_titolo_cad_s is not null 
    and pr.ult_prezzo = pr.ult_prezzo_euro 
    and faf.divisa_quot_t<>'242' 
    and prod.gstd_esist_b='S' 
    and fpl.gstd_esist_b='S' 
    and faf.gstd_esist_b='S' 
    and pr.gstd_esist_b='S' 
    and pr.gstd_ult_user_s in ('AGGIORNAMENTO_POSIZIONE') 
    and pr.ult_prezzo>0 
    and fs.cambio>0; 

это даст мне «SQL КОМАНДА НЕ ПРАВИЛЬНО ЗАКАНЧИВАЮЩИЙСЯ», указывая на от строки,

А также я бы оптимизировать это обновление заявление, потому что это должно работать на около 2 миллионов записей, как это возможно?

ответ

1

я не могу быть уверен, что это будет правильный ответ, не видя вашу структуру базы данных, но первый: у вас есть неправильный синтаксис, он должен выглядеть следующим образом:

UPDATE fin_prezzo as pr SET pr.ult_prezzo_euro = ... 

, а затем вам придется изменить цепь JOINS, чтобы должным образом присоединиться к таблице fin_prezzo (как упоминалось в первой таблице). , если это будет проблема, вы можете «UPDATE» другая таблица в заявлении (без изменения/добавления/удалений обновляемых столбцов)

оптимизации объявлений часть: будет хорошо начать с ЗЕЬЕСТ (вместо UPDATE) чтобы увидеть, как он соединяется (возможно, дублирует строки из-за объединений) и уменьшает дублирование или не обязательно соединяет. вторых быстрее двигаться «правила» из WHERE заявление РЕГИСТРИРУЙТЕСЬ о , например:

INNER JOIN fin_att_fin as faf ON fpl.attivita_fin_id=faf.attivita_fin_id AND faf.gstd_esist_b='S' 

еще один хороший метод сравнения чисел вместо строк («S», «242» ...), это просто быстрее

остальное до пытается ..

надежда, что я помог немного;)

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