You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python环境下用MySQL JOIN优化history_price表NULL字段批量填充

用单条UPDATE JOIN语句完成批量填充

直接通过UPDATE ... JOIN语句就能一次性完成asset_id和volume的批量填充,无需循环执行多次查询,大幅提升效率:

UPDATE history_price h
JOIN param_asset p 
  ON h.Ticker = p.Ticker -- 若需模糊匹配,可改为 h.Ticker LIKE CONCAT('%', p.Ticker, '%')
SET 
  h.asset_id = p.asset_id,
  h.volume = CAST(h.Price AS DECIMAL(10,2)) * CAST(h.Quantity AS DECIMAL(10,2))
WHERE h.volume IS NULL; -- 若asset_id也存在大量NULL,可追加条件:AND h.asset_id IS NULL

逻辑说明

  1. 表关联:通过Ticker字段将history_price(别名h)与param_asset(别名p)关联,一次性获取所有待填充的asset_id
  2. 批量赋值:在SET子句中同时完成asset_id的填充和volume的计算(用CAST确保字符串类型的Price/Quantity转为数值,避免运算错误)
  3. 精准过滤:通过WHERE仅更新volume为NULL的记录,不干扰已有有效数据

安全验证建议

执行UPDATE前先运行查询确认结果符合预期:

SELECT 
  h.Ticker,
  h.Price,
  h.Quantity,
  p.asset_id,
  CAST(h.Price AS DECIMAL(10,2)) * CAST(h.Quantity AS DECIMAL(10,2)) AS calculated_volume
FROM history_price h
JOIN param_asset p ON h.Ticker = p.Ticker
WHERE h.volume IS NULL;

若存在Ticker无法匹配的情况,可改用LEFT JOIN并设置默认值(比如h.asset_id = COALESCE(p.asset_id, 0)),但优先确保Ticker能与param_asset正确关联。

内容的提问来源于stack exchange,提问作者Mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:35:06