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

MySQL跨表UPDATE更新仅复制源表首行数据问题排查

错误原因
  • 核心问题是原UPDATE语句缺失两表之间的逐行匹配关联条件,仅分别对两张表做了时间区间过滤。
  • 这种写法会让数据库生成两张表符合过滤条件的笛卡尔积:目标表的每一行,都会和源表所有符合时间范围的行生成匹配对。由于没有明确的行对应规则,更新时数据库会默认取扫描到的第一条源表数据,赋值给所有符合条件的目标表行,最终就出现了所有目标行都被源表首行数据填充的问题。
修正方案

需要补充两表的日期关联规则:目标表mkt_data.bknk1810的Date是日期时间类型,源表tiresia.equity_810_openings的p_key是YYYYMMDD格式的整数,需要将两个字段做格式对齐后作为关联条件,修正后的SQL如下:

UPDATE mkt_data.bknk1810, tiresia.equity_810_openings SET
    mkt_data.bknk1810.max   = tiresia.equity_810_openings.A,
    mkt_data.bknk1810.min   = tiresia.equity_810_openings.B,
    mkt_data.bknk1810.close = tiresia.equity_810_openings.C,
    mkt_data.bknk1810.open  = tiresia.equity_810_openings.D
WHERE 
    -- 核心关联条件:按日期逐行匹配
    DATE_FORMAT(mkt_data.bknk1810.Date, '%Y%m%d') + 0 = tiresia.equity_810_openings.p_key
    -- 原有时间范围过滤条件保留
    AND mkt_data.bknk1810.Date >= '2021-07-19' 
    AND mkt_data.bknk1810.Date <= '2021-09-09'
    AND tiresia.equity_810_openings.p_key >= 20210719 
    AND tiresia.equity_810_openings.p_key <= 20210909;
执行说明

补充关联条件后,数据库只会将日期完全对应的源表行和目标表行配对更新,执行后即可得到预期的按日期对齐填充的结果,不会出现单条数据覆盖所有目标行的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:24:24