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
。
任何想法? 感謝您的幫助。
哇,我是個白癡。爲此非常感謝。 –