SQL循环使用另一个表中的值填充值

时间:2016-01-21 11:10:29

标签: mysql sql sql-server

因此给出了2个表的表结构:

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 server和mysql的SQL脚本中使用?

请注意,我们不能使用视图或计算列作为要求。

1 个答案:

答案 0 :(得分: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)