首页 > 解决方案 > mysql将完整的行数据从一个表复制到另一个具有不同字段的表

问题描述

我有一张主桌

id       Name       Value
2          A          4
4          A          5
6          B          8
8          C          9

和一个历史表,它是主表的副本,但具有 history_id

history_id   id       Name       Value
    1        2          A          4
    2        4          A          5
    3        6          B          8
    4        8          C          9

我想要实现的是history_table在发生更改时将主表的行复制到master_table

我正在尝试这样做

INSERT INTO history_table
VALUES ('', SELECT * FROM master_table WHERE `id` = 8)

它返回给我的错误是两个表中的列都不匹配。如果没有,我希望我能正确尝试,然后请建议任务的最佳方法。

PS:我不想在查询中提及静态列名和值,因为表中有 50 多个字段,并且数据库结构中的任何新更改将来都会使查询失败。

标签: mysqlsqlsql-insert

解决方案


您应该列出要插入的列并使用insert . . . select

INSERT INTO history_table (id, name, value)
    SELECT id, name, value
    FROM master_table
    WHERE `id` = 8;

这假定它history_id是自动设置的(自动递增)。

你的问题是指价值观的变化。但是,这与您指定的错误无关。如果您对检测更改还有其他问题,请使用适当的样本数据、所需结果和解释提出一个新问题。


推荐阅读