【问题标题】:Multiple INSERT queries turned into one single query [duplicate]多个 INSERT 查询变成了一个查询 [重复]
【发布时间】:2013-04-29 09:05:27
【问题描述】:

我已经通过 Stackoverflow 进行了搜索,但没有正确回答我的问题。

我的问题是如何将多个 INSERT 查询转换为 1 个单个插入查询。

更具体; https://gist.github.com/gregariousjb/e73fdf1489acbbb63651这个。这就是我需要了解如何将其组合成一个的查询。

样品;

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

其中有 1000 个,需要变成一个。我真诚地感谢我能得到的任何帮助。

【问题讨论】:

  • 您使用的是哪个数据库?

标签: sql


【解决方案1】:

如果您使用的是 Sql Server,请尝试以下操作

Insert into table (columns..)
Values(values1,value2,...), 
    (values1,value2,...),
    (values1,value2,...),
    (values1,value2,...)

【讨论】:

  • +1 也适用于 MySQL
【解决方案2】:

最接近的是只需要字段列表一次的速记版本:

  INSERT INTO `creature` ( <field list> ) VALUES
    ( <value list> ),
    ( <value list> ),
    ( <value list> )

【讨论】:

    【解决方案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 神秘,但我明白了 :)
    • 第二个说法并不完全正确。在 Oracle(从 10gR2 开始)中,您必须执行 SELECT 1, 2843, 0, ... FROM DUAL,而在 Jet SQL(又名 Access)中,没有等效项。但是,对于 SQL Server,省略 FROM 子句肯定是可行的。
    • @cheran OK 谢谢你的提醒。我已更新我的答案以添加此 Oracle 特性。
    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 2014-06-01
    • 2015-10-24
    • 2011-12-26
    • 1970-01-01
    • 2018-12-13
    • 2010-10-15
    • 1970-01-01
    相关资源
    最近更新 更多