2016-01-21 4 views
0

Итак, учитывая структуру таблицы из 2 таблиц:SQL цикл для заполнения значения, используя значение из другой таблицы

Line_Item

line_item_id item_id a_basic a_original b_basic  b_original c_basic  c_original 
1    1   NULL  5   NULL   2   NULL   1 
2    1   NULL  6   NULL   100   NULL   5 
3    2   NULL  10   NULL   50   NULL   15 
4    2   NULL  2   NULL   12   NULL   100 

вещь

item_id rate 
1   1.5 
2   2 

мне нужно заполнить нулевые значения в таблице line_item, используя этот расчет:

item.rate x x_original 

так для LINE_ITEM_ID: 1, было бы

a_original x item_id.rate (5 x 1.5) 

Возможно ли это в сценарии SQL, который поддерживает SQL-сервер и MySQL?

Обратите внимание: не может использовать представления или вычисленные столбцы в качестве требования.

+0

'сливаются (original_column, item.rate х x_original)'? – jarlh

ответ

2

Здесь нет никакой петли. Простота обновления может быть достигнута.

Но поскольку синтаксис обновления соединения отличается в MySQL и SQL Server, вы не можете сделать это с помощью какого-то «универсального» запроса.

В SQL Server должно быть

update LI set 
    a_basic = coalesce(a_basic, LI.a_original * I.rate), 
    b_basic = coalesce(b_basic, LI.b_original * I.rate), 
    c_basic = coalesce(c_basic, LI.c_original * I.rate) 
from line_item as LI 
    left outer join item as I on I.item_id = LI.item_id 

И в MySQL должна быть

update line_item as LI 
    left outer join item as I on I.item_id = LI.item_id 
set 
    a_basic = coalesce(a_basic, LI.a_original * I.rate), 
    b_basic = coalesce(b_basic, LI.b_original * I.rate), 
    c_basic = coalesce(c_basic, LI.c_original * I.rate) 
Смежные вопросы