2012-06-28 116 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

任何想法? 感謝您的幫助。

回答

相關問題