JOIN / CM-39

合并,但由你裁决

三份表拼起来,最怕悄悄覆盖。这里把每个冲突摊开:候选原值、来源文件、行号一个不少,点一下决定采用谁的。

0待裁决冲突
投放 2~10 份 CSV点击或拖入 · 列表顺序即优先级

    读取服务上限…

    上传至少 2 份 CSV 并填写主键,冲突项会逐条出现在这里供裁决。

    合口径说明与常见误填 把话说清楚,比报个数更有用

    合并口径 内存哈希做全外连接,不引 SQL 引擎、不落盘;表头按名称归一化对齐(大小写 / 空格 / 全角 / 标点不敏感)。
    四类清单 matched 命中 ≥2 个源文件、only_in 仅某表存在、duplicate_keys 单表内主键重复、conflicts 同键不同值。
    冲突保留 conflicts[].values 保留每个源文件的原值、来源名与行号,一个都不丢,供人工裁决。
    冲突策略 keep_first 取最靠前上传文件的值、keep_last 取最后一份、blank 让冲突单元格留空;三种策略都会完整输出冲突清单。
    主键规则 key 必须在每一份源文件里都能找到;支持多列复合主键(逗号分隔)、列序号或 col_N;主键全空的行会被跳过并计数。
    常见误填 上传顺序决定 keep_first / keep_last 的结果;文件名重复时可用 source_names 指定来源名,避免清单里分不清是哪份文件。

    这个工具解决什么问题

    月度汇总把三份客户表拼起来,最怕「 silently 覆盖」:某个字段两份表不一样,合并完没人知道该信谁。本工具按主键做全外连接,把匹配、独有、重复、冲突拆成四份清单,冲突项连原值和源文件行号一起保留,让人来拍板。

    三条裁决原则

    • 先看 duplicate_keys:单表内主键重复时,合并结果只取其中一条,全部行号留在清单里。
    • conflict_policy 只影响合并结果的取值,不影响冲突清单;清单始终是全量候选。
    • blank 策略适合「宁可留空不可猜错」的场景,配合 conflicts_csv 一起交付。

    按这几步用

    1. 上传 2~10 份 CSV:字段名固定为 files,按上传顺序决定优先级。
    2. 指定主键:填每一份表都存在的列名,多列用逗号分隔组成复合主键。
    3. 选择冲突策略:默认 keep_first;需要人工回填可选 blank。
    4. 核对四类清单:逐项看匹配、独有、重复与冲突,冲突项展开源文件与原值。
    5. 导出结果:下载合并结果或任一清单 CSV(带 UTF-8 BOM)。

    小提示

    服务无状态:下载合并结果时会用相同的文件与参数重新提交一次;若中途换了文件,请先重新合并。清单数组可能被截断,总数读 stats。

    更新记录

    • v1.0 2026-11-07 工具上线:全外连接、四类清单、三种冲突策略与五份 CSV 导出。

    常见问题

    提示某份文件找不到主键列?

    服务端会点名是哪个文件、哪一列。请统一表头写法(或改用列序号 / col_N),确认后重新上传。

    同一份表里主键重复会丢数据吗?

    不会丢清单:合并结果按策略取其中一条,全部重复行号在 duplicate_keys[].lines 里,可据此回源表核对。

    复合主键怎么填?

    用逗号分隔多个列名,如 id,month;服务端按组合值做哈希,任一部分为空会影响归组。

    为什么冲突清单里有值,合并结果却是空的?

    这是 conflict_policy=blank 的预期行为:冲突单元格留空等待人工回填,请配合导出的 conflicts_csv 一起处理。

    💬 留言板 0

    全部留言需审核通过后展示
    💬

    还没有留言,来抢沙发吧!

    ✍️ 说点什么
    0 / 500
    图形验证码