如何通过SELECT语句向数据库表中插入多条数据?
批量插入实现方案
问题背景
现有SQL语句如下,其中:id为静态值,但嵌套子查询会返回多条数据,原VALUES写法无法完成批量插入:
INSERT INTO DM_SPONSOR_EQUIPO_VENTA dsev (dsev.SEV_IDEQUIPO_VENTA, dsev.SEV_IDSPONSOR) VALUES (:id, (SELECT ds.SPO_IDSPONSOR FROM DM_SPONSOR ds INNER JOIN DM_GRUPO dg ON ds.GP_IDGRUPO = dg.GP_IDGRUPO WHERE dg.GP_IDGRUPO = :idg))
预期插入结果示例:
| Column A | Column B |
|---|---|
| 1 | 5600 |
| 1 | 83000 |
解决方案
使用INSERT ... SELECT语法替代VALUES,直接将静态值与子查询结果组合成多行数据批量插入:
INSERT INTO DM_SPONSOR_EQUIPO_VENTA dsev (dsev.SEV_IDEQUIPO_VENTA, dsev.SEV_IDSPONSOR) SELECT :id, ds.SPO_IDSPONSOR FROM DM_SPONSOR ds INNER JOIN DM_GRUPO dg ON ds.GP_IDGRUPO = dg.GP_IDGRUPO WHERE dg.GP_IDGRUPO = :idg
说明
这种写法会把静态值:id和查询返回的每一条SPO_IDSPONSOR配对,生成所有需要插入的行并一次性提交,完美适配批量插入需求,最终插入结果与示例表格一致。
内容的提问来源于stack exchange,提问作者David Villa
相关产品推荐
相关产品推荐

