如何通过多段SELECT语句实现批量INSERT插入操作?
解决MySQL多段SELECT批量INSERT的语法错误问题
问题原因
你用逗号分隔多个SELECT语句来执行批量INSERT的写法不符合MySQL的INSERT...SELECT语法规范,这是触发[Code: 1064, SQL State: 42000]语法错误的直接原因。MySQL不支持这种用逗号直接拼接多个SELECT子查询的方式。
正确写法
将多个SELECT语句通过UNION ALL(需去重则用UNION)连接成一个整体数据源,再执行插入操作。修改后的语句如下:
INSERT INTO factmonitoreo (idEstacion, IdVariable, IdTiempoRegistro, Valor, ValorOriginal, FlagRegistro) SELECT dt.idEstacion, dv.IdVariable, '2007-01-01 00:04:29', 0, 0, 0 FROM dimestacion AS dt INNER JOIN dimtipoestacion AS dte ON dt.IdTipoEstacion = dte.IdTipoEstacion JOIN dimvariable AS dv WHERE dt.Estacion LIKE 'El Lago' AND dte.CodTipoEstacion LIKE 'ECT' AND dv.ColumnNameToManualUpdateFromCSV LIKE 'Temperatura' UNION ALL SELECT dt.idEstacion, dv.IdVariable, '2007-01-01 00:04:28', 0, 0, 0 FROM dimestacion AS dt INNER JOIN dimtipoestacion AS dte ON dt.IdTipoEstacion = dte.IdTipoEstacion JOIN dimvariable AS dv WHERE dt.Estacion LIKE 'El Lago' AND dte.CodTipoEstacion LIKE 'ECT' AND dv.ColumnNameToManualUpdateFromCSV LIKE 'Temperatura';
补充说明
UNION ALL会保留所有查询结果,性能比UNION更高,无去重需求时优先使用;如果需要去除重复行,替换为UNION即可。- 必须保证每个SELECT语句返回的列数、顺序、数据类型与目标表的字段完全匹配,这是
INSERT...SELECT执行成功的基础前提。
内容的提问来源于stack exchange,提问作者Giovanni Mosquera
相关产品推荐
相关产品推荐

