如何根据section字段值将dr_machine表数据插入到dr_tv_table表?
解决方案:按Section分类迁移数据到目标表
需求明确
从dr_machine表提取sawing_type,根据section值(L01/L02/L03)插入到dr_tv_table对应的列中。
源表与目标表结构回顾
源表 dr_machine
| mID | Code | sawing_type | section |
|---|---|---|---|
| 1 | 0058 | Zigzag | L01 |
| 2 | 0065 | Zigzag | L01 |
| 3 | 0089 | Puller | L02 |
| 4 | 1124 | Single Needle | L03 |
| 5 | 8796 | Double Needle | L04 |
目标表 dr_tv_table
| sID | L01 | L02 | L03 |
|---|---|---|---|
正确实现方式
方式1:按Section汇总插入(同一Section的多个值合并)
如果需要把同一Section的所有sawing_type合并后插入对应列,用GROUP_CONCAT函数:
INSERT INTO dr_tv_table (L01, L02, L03) SELECT GROUP_CONCAT(CASE WHEN section = 'L01' THEN sawing_type END SEPARATOR ', ') AS L01, GROUP_CONCAT(CASE WHEN section = 'L02' THEN sawing_type END SEPARATOR ', ') AS L02, GROUP_CONCAT(CASE WHEN section = 'L03' THEN sawing_type END SEPARATOR ', ') AS L03 FROM dr_machine;
执行后目标表生成一行数据:
| sID | L01 | L02 | L03 |
|---|---|---|---|
| 1 | Zigzag, Zigzag | Puller | Single Needle |
方式2:按机器记录逐个插入(每条机器对应一行,仅对应Section列填值)
如果需要将每个机器的sawing_type插入到对应Section列,其他列留空:
INSERT INTO dr_tv_table (L01, L02, L03) SELECT CASE WHEN section = 'L01' THEN sawing_type END AS L01, CASE WHEN section = 'L02' THEN sawing_type END AS L02, CASE WHEN section = 'L03' THEN sawing_type END AS L03 FROM dr_machine WHERE section IN ('L01', 'L02', 'L03'); -- 过滤目标表没有的L04数据
执行后目标表生成4行数据:
| sID | L01 | L02 | L03 |
|---|---|---|---|
| 1 | Zigzag | ||
| 2 | Zigzag | ||
| 3 | Puller | ||
| 4 | Single Needle |
修正存储过程(若必须用存储过程实现)
如果一定要用存储过程完成方式2的逻辑,可参考:
DELIMITER $$ CREATE PROCEDURE insert_into_tv_table() BEGIN -- 插入L01分组的数据 INSERT INTO dr_tv_table (L01) SELECT sawing_type FROM dr_machine WHERE section = 'L01'; -- 插入L02分组的数据 INSERT INTO dr_tv_table (L02) SELECT sawing_type FROM dr_machine WHERE section = 'L02'; -- 插入L03分组的数据 INSERT INTO dr_tv_table (L03) SELECT sawing_type FROM dr_machine WHERE section = 'L03'; END$$ DELIMITER ;
调用存储过程:
CALL insert_into_tv_table();
关键说明
- 避免用循环拼接列名,MySQL中直接使用
CASE语句或聚合函数更高效 - 目标表
sID如果是自增主键,插入时无需手动赋值,数据库会自动生成 - 若需处理重复数据,可在
INSERT前执行DELETE FROM dr_tv_table;清空表,或使用INSERT ... ON DUPLICATE KEY UPDATE逻辑
内容的提问来源于stack exchange,提问作者stack perera
相关产品推荐
相关产品推荐

