mysql - 为什么MySQL更新只更新1个字段而不更新2个?

标签 mysql average

我已尝试以下 MySQL 更新,但它仅设置第一个字段 c.avg_price_dil 而不是第二个字段 c.avg_dilution

奇怪的是,当我将更新分为两部分(如下所示)时,两个部分都适用于正在更新的两个字段。基于组的函数是否会影响此调用?

更新了两个字段 - 仅更新了 c.avg_price_dil

update corp_act as c
inner join (
  select 
      m.gvkey, m.gvkey_iid, m.date_base, avg(m.price_dil) as avg_price, 
      avg(m.dilution) as avg_dilution
  from master as m
  inner join corp_act as c
  on c.gvkey = m.gvkey AND
      m.date_base between c.date_base AND 
                          LAST_DAY(c.date_base + INTERVAL 11 MONTH)
  where c.actioncd not in ('N/C','REA','SPN') AND 
        c.actioncd IS NOT NULL
  group by m.gvkey_iid, c.actioncd) as x
on 
   x.gvkey = c.gvkey AND 
   x.date_base = c.date_base
set 
    c.avg_price_dil = if(x.avg_price is null, 0, x.avg_price) AND
    c.avg_dilution = if(x.avg_dilution is null, 0, x.avg_dilution)

当分成两个更新时,两者都有效:

稀释更新: - 工作正常

update corp_act as c
inner join (
  select 
       m.gvkey, m.gvkey_iid, m.date_base, avg(m.dilution) as avg_dilution
  from master as m
  inner join corp_act as c
  on c.gvkey = m.gvkey AND
     m.date_base between c.date_base AND 
                         LAST_DAY(c.date_base + INTERVAL 11 MONTH)
  where c.actioncd not in ('N/C','REA','SPN') AND 
        c.actioncd IS NOT NULL
  group by m.gvkey_iid, c.actioncd) as x
on 
   x.gvkey = c.gvkey AND 
   x.date_base = c.date_base
set 
   c.avg_dilution = if(x.avg_dilution is null, 0, x.avg_dilution)

价格更新: - 效果很好

update corp_act as c
inner join (
  select 
     m.gvkey, m.gvkey_iid, m.date_base, avg(m.price_dil) as avg_price
  from master as m
  inner join corp_act as c
  on c.gvkey = m.gvkey AND
     m.date_base between c.date_base AND 
                         LAST_DAY(c.date_base + INTERVAL 11 MONTH)
  where c.actioncd not in ('N/C','REA','SPN') AND 
        c.actioncd IS NOT NULL
  group by m.gvkey_iid, c.actioncd) as x
on 
   x.gvkey = c.gvkey AND 
   x.date_base = c.date_base
set 
   c.avg_price_dil = if(x.avg_price is null, 0, x.avg_price)

这两者之间的唯一区别是我只在各个函数中使用 avg 函数一次。

有什么想法吗? 感谢您的帮助。

最佳答案

设置 c.avg_price_dil = if(x.avg_price 为 null, 0, x.avg_price) AND c.avg_dilution = if(x.avg_dilution 为 null, 0, x.avg_dilution)

尝试用逗号 (,) 替换 AND

http://dev.mysql.com/doc/refman/5.0/en/update.html

关于mysql - 为什么MySQL更新只更新1个字段而不更新2个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240231/

相关文章:

php - 通过php在服务器之间同步数据库

PHP MySQL 连接失败

python - 如何在matplotlib中绘制平均线?

average - 计算平均评分

mysql - 尝试取具有三个内部连接表 MySQL 的列的平均值

java - 如何将用户输入(来自对话框)转换为数组

python - 在单行上输入多个值并获取使用 Python 输入的值的平均值

mysql - 如何使用一个sql查询更新一列中的多个值?

mysql - MySQL 中的 INT 数据类型

c# - MySql 语法错误 : You have an error in your SQL syntax near '' at line 1