2012-06-28 57 views
0

我试过以下MySQL更新,但它只设置第一个字段c.avg_price_dil而不是第二个字段c.avg_dilution为什么MySQL只更新1字段而不是2?

奇怪的部分是,当我将更新分成两部分,如下所示,两个字段都更新。是否存在影响此调用的基于组的函数?

已更新两个字段 - 仅更新了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) 

唯一的d这两者之间的区别在于,我仅在个别函数中使用了一次函数avg

任何想法? 感谢您的帮助。

回答

相关问题