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

标签 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 脚本中可能吗?

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

最佳答案

这里不需要任何循环。通过简单的更新即可实现您的目标。

但是由于 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)

关于mysql - SQL 循环使用另一个表中的值填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34922193/

相关文章:

SQL 优化 - 从历史表中获取两个不同日期的值

sql - 使用模型子句来扩展日期

mysql - 使用node.js在MySql中批量插入

php - 如何使用 php 和 mysql Ajax、Jsone 显示公司详细信息的自动显示详细信息

python - 使用正则表达式 Python 3 捕获两个已知单词之间的所有多行文本

sql-server - 引入 FOREIGN KEY 约束可能会造成环路或多级联路径。指定删除时不执行任何操作

sql-server - SSIS(需要 ASCII): "Code page is 1252 and is required to be 20127"

使用 CTE 的 SQL 更新不更新记录

php - 使用没有列别名的 PDO::FETCH_ASSOC 的奇怪 MYSQL 结果

c# - 修改密码无效