SQL如何将单列查询结果插入多列现有表并自动填充其余字段值
报错核心原因
INSERT INTO ... VALUES 仅适用于插入手动指定的固定值,插入SELECT查询结果时不需要加VALUES关键字,直接拼接SELECT语句即可。
可直接运行的正确语句
INSERT INTO `total medals` (Country, Gold, Silver, Bronze, Total, `Rank by Gold`, `Rank by Total`) SELECT find.Country, 0 AS Gold, 0 AS Silver, 0 AS Bronze, 0 AS Total, 87 AS `Rank by Gold`, 78 AS `Rank by Total` FROM ( SELECT DISTINCT Country FROM `athletes` ) AS find LEFT JOIN ( SELECT DISTINCT Country FROM `total medals` ) AS inside ON find.Country = inside.Country WHERE inside.Country IS NULL;
问题1:如何将单列查询结果逐行插入列数更多的现有表中?
- 使用
INSERT INTO 目标表(指定插入列) + SELECT查询的语法结构即可,无需嵌套VALUES。 - 只要SELECT语句返回的列顺序、数据类型和你指定的插入列一一对应,查询返回的每一行都会自动作为新行插入目标表。
- 未在插入列中指定的字段,需要确保目标表中该字段设置了默认值,或允许为NULL,否则会触发非空约束报错。
问题2:能否在插入的同时自动填充其余字段为指定的0、87、78固定值?
- 完全可以,直接在SELECT的查询字段列表中写入你需要的固定值即可,固定值会自动作为当前行对应列的取值,无需插入后再做更新。
- 如果你需要频繁执行同类插入操作,也可以直接修改
total medals表的结构,给对应字段设置默认值:Gold、Silver、Bronze、Total默认值设为0,Rank by Gold默认值设为87,Rank by Total默认值设为78,之后插入时只需指定Country列即可,其余列会自动填充默认值。
内容的提问来源于stack exchange,提问作者TheTravdrum
相关产品推荐
相关产品推荐

