mysql - 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 多个字段,并且数据库结构中的任何新更改将来都会使查询失败。
解决方案
您应该列出要插入的列并使用insert . . . select
:
INSERT INTO history_table (id, name, value)
SELECT id, name, value
FROM master_table
WHERE `id` = 8;
这假定它history_id
是自动设置的(自动递增)。
你的问题是指价值观的变化。但是,这与您指定的错误无关。如果您对检测更改还有其他问题,请使用适当的样本数据、所需结果和解释提出一个新问题。
推荐阅读
- python - 关于python3列表删除的问题。为什么我不能删除偶数和奇数?
- javascript - 如何在电子应用程序中访问相机/网络摄像头?
- powerbi - 在 DAX/Power BI 中对值进行排序
- javascript - 未找到 404 NotFoundError:未找到 - Node.js Express
- reactjs - DetailsList 组件未考虑选择属性
- powershell - Web-Deploy 中的 SkipFolderList 参数跳过的不仅仅是文件夹
- facebook-graph-api - 如何从服务器端的客户 Instagram 和 Facebook 公共页面获取媒体?
- gcc - 在 MINGW64 下编译 dhex?
- php - 通过电子邮件发送选定的复选框值
- php - 无法使用 div id 触发自定义材料设计模型到 wordpress 菜单