SQL & Excel 批量处理技巧整理

快速、可复用的 SQL 与 Excel 批量处理技巧集合,覆盖:关联更新、拼接更新、替换更新、拼接查询以生成初始化 SQL、Excel 自动生成建表语句与 IN 列表。


1. 关联表更新(批量初始化 / 同步)

用途:通过关联表把一个表的字段刷新为另一个表的值,常用于填充冗余字段、同步层级信息。

示例(MySQL):

1
2
3
4
UPDATE sku_table a
JOIN sku_category b ON a.sku_category_id = b.id
SET a.sku_category_hierarchy_id = b.hierarchy_id
WHERE a.sku_category_id IS NOT NULL;

要点

  • 生产库先 SELECT 验证影响行:SELECT a.id FROM sku_table a JOIN sku_category b ... LIMIT 10;
  • 大表拆批(根据 id 范围或 LIMIT + 主键)以避免锁表。
  • 更新前务必备份或使用事务(支持的场景)。

2. 拼接更新(增加前缀/后缀 / 构建层级)

用途:为字段加固定前后缀、生成组合字段、构造层级路径等。

示例:

1
2
3
UPDATE sku_table
SET full_sku = CONCAT('GLB-', sku, '-', warehouse_code)
WHERE full_sku IS NULL;

要点

  • 控制空值:CONCAT 会把 NULL 变为 NULL,可用 CONCAT_WSCOALESCE 处理。
  • 若需格式化数字可用 LPADFORMAT 等。

3. 替换更新(清洗特殊字符)

用途:批量替换字段中的字符(比如把 \\ 换成 /),适合清洗或标准化字符串。

示例:

1
2
3
UPDATE table_name
SET path = REPLACE(path, '\\', '/')
WHERE path LIKE '%\\%';

要点

  • 使用 WHERE 过滤以减小扫描量。
  • 对于复杂正则替换,MySQL 8 可用 REGEXP_REPLACE

4. 拼接查询生成初始化 SQL(导出执行脚本)

用途:把查询结果拼成 INSERT / UPDATE 语句,用于迁移或批量初始化。

示例:

1
2
3
4
5
6
SELECT CONCAT(
'INSERT INTO product(id, name, price) VALUES (', id, ',\'",
REPLACE(name, '\'','\'\'') ,"\',", price,');'
) AS init_sql
FROM src_table
WHERE ...;

要点

  • 对字符串做转义(例如把单引号替换为两个单引号)。
  • 导出结果到文件,再通过脚本分批执行。

5. Excel 自定义函数自动生成建表语句

用途:把表字段清单结构化成 CREATE TABLE,适合产品/DBA 协作场景。

方法建议:

  • Excel 列:字段名、类型、是否为空、默认值、注释。
  • 使用公式拼接每列定义,或用 VBA 写一个 MakeCreateTable() 函数输出完整 CREATE TABLE

简易公式示例(假设 A2=col, B2=type, C2=null_flag, D2=default, E2=comment):

1
=CONCAT("`", A2, "` ", B2, IF(C2="NO"," NOT NULL",""), IF(D2<>""," DEFAULT '"&D2&"'",""), IF(E2<>""," COMMENT '"&E2&"'",""), ",")

将所有列公式合并并包裹 CREATE TABLE name ( ... )


6. Excel 的 TEXTJOIN 快速生成 IN 条件

用途:把一列值拼成 SQL 的 IN 列表,便于临时查询或调试。

公式示例(A101:A141 为值范围):

1
="('" & TEXTJOIN("','", TRUE, A101:A141) & "')"

要点

  • 当行数很多时,注意 IN 列表长度与 SQL 性能;对大集合优先用临时表或 JOIN

实战注意与最佳实践(速查)

  • 备份优先:任何批量写操作前先备份表或在事务中验证。
  • SELECT 验证:用 SELECT 模拟将要更新的行集合。
  • 分批执行:大表使用 LIMIT + 主键区间或 chunk 策略,避免长事务与行锁。
  • 索引与性能:更新涉及索引字段时注意索引维护成本,尽量基于主键做分片。
  • 日志与回滚策略:把生成的更新语句保存日志,便于回滚与审计。