将多个INSERT查询合并为单个查询

5

我在 Stackoverflow 上进行了搜索,但没有一个正确回答我的问题。

我的问题是如何将多个 INSERT 查询转换为一个单独的 INSERT 查询。

更具体地说:https://gist.github.com/gregariousjb/e73fdf1489acbbb63651 这是我需要理解如何制作单一查询的查询。

示例;

INSERT INTO `creature` (`guid`, `id`, ...) 
     VALUES (1, 2843, ...);
INSERT INTO `creature` (`guid`, `id`, ...)
     VALUES (2, 7853, ...);

有1000个这样的内容,需要合并成一个。非常感谢您能提供任何帮助。


2
你使用哪个数据库? - Andomar
3个回答

5
如果您使用Sql Server,请尝试以下操作:
Insert into table (columns..)
Values(values1,value2,...), 
    (values1,value2,...),
    (values1,value2,...),
    (values1,value2,...)

3
在 MySQL 中,可以使用以下方法(大多数流行数据库都有类似的语法):
INSERT INTO mytable (col1, col2, col3, ...) VALUES
(1, 2843, 0, ...),
(2, 7853, 0, ...);

在大多数数据库中,您可以这样做:
INSERT INTO mytable (col1, col2, col3, ...)
SELECT 1, 2843, 0, ...
UNION ALL
SELECT 2, 7853, 0, ...;

在过时的数据库(例如Oracle)中,你必须使用人工单行表DUAL来编码第二个选项:
INSERT INTO mytable (col1, col2, col3, ...)
SELECT 1, 2843, 0, ...
FRIM DUAL
UNION ALL
SELECT 2, 7853, 0, ...
FROM DUAL;

@Denis 的表述有点晦涩,但我理解了 :) - Bohemian
第二个语句并不完全正确。在Oracle(截至10gR2),您必须执行SELECT 1, 2843, 0, ... FROM DUAL,而在Jet SQL(又名Access)中,则没有相应的语句。但是对于SQL Server来说,省略FROM子句确实可行。 - Cheran Shunmugavel
@cheran 好的,谢谢你提醒我。我已经更新了我的答案,加入了这个 Oracle 的特殊情况。 - Bohemian

2
最接近的是使用缩写版本,它只需要一次列出字段列表:
  INSERT INTO `creature` ( <field list> ) VALUES
    ( <value list> ),
    ( <value list> ),
    ( <value list> )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接