一个查询中的多个 INSERT INTO 语句

Posted

技术标签:

【中文标题】一个查询中的多个 INSERT INTO 语句【英文标题】:Multiple INSERT INTO statements within one query 【发布时间】:2018-12-13 08:02:25 【问题描述】:

我有两张桌子:BT 和 ST。 以下是我希望我能完成的:

INSERT INTO BT (c1,c2,c3) values (v1,v2,v3)

ST 是一个有 89 行和 1 列的表。如果可以,我该如何制定一个查询,以便插入适用于 ST 表中的 89 个值中的每一个?

(请记住:这些值是随机的,我无法将它们联系起来)

c1-c3= column1,column2,column3

v1-v3= 值 1,值 2,值 3 (v2 和 v3 是预定义和设置的,不需要更改)

我尝试了更明显的事情但没有成功,例如:

INSERT INTO BT (c1,c2,c3) values ((select c1 from ST),v2,v3)

但该行所做的只是返回一般的 sql 语法错误。

我承认这可以通过 89 行“INSERT INTO”来执行,并且我每次都更改一个值,但这可以以更优雅的方式完成吗?

我正在使用 mysql

【问题讨论】:

【参考方案1】:

你只想要insert . . . select:

insert into BT (c1, c2, c3) 
   select c1, v2, v3
   from ST

【讨论】:

但是 ST 只保存 v1 的值,而 v2 和 v3 在查询中设置一次。 (/* SQL 错误 (1241): 操作数应包含 1 列 */) 是该建议的结果 @NikolaPavlovic 。 . .我不明白。您可以设置变量@v1@v2 或只传入常量。 我想使用 SQL 执行插入到 BT 表中的查询,其中 v2 和 v3 值由我设置,但 v1 要从 ST 表的 c1 列中使用 这确实有效,但必须将 v2 和 v3 定义为附加列,因为 BT 有 3 列而 ST 只有一个> insert into BT (c1,c2,c3) select c1,'number1' as v2,'number2' as v3 from ST @NikolaPavlovic 。 . .是的,你可以传入常量。

以上是关于一个查询中的多个 INSERT INTO 语句的主要内容,如果未能解决你的问题,请参考以下文章

“INSERT INTO 语句中的语法错误”和“没有为一个或多个必需参数提供值”

Access 2003中的SQL:INSERT INTO和多个SELECT查询

INSERT INTO 语句包含以下未知字段名称

“查询输入必须至少包含一个表或查询”添加“INSERT INTO”语句时出错

INSERT INTO 语句包含以下未知字段名称

insert into语句的语法错误