【问题标题】:Use INSERT INTO with multiple SELECT statements将 INSERT INTO 与多个 SELECT 语句一起使用
【发布时间】:2016-04-05 18:39:53
【问题描述】:

我正在尝试在表格中插入几行。这些行的几乎所有值都与同一张表上的另一组记录匹配,所以我很好奇是否可以编写一个带有多个 SELECT 语句的单个 INSERT 语句来插入多行。像这样的:

INSERT INTO table (col1, col2, col3, col4)

SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 0
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 1
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 2
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 3

这可能吗?最后,它应该插入了 4 行,它们都具有相同的 NewRecordID,col4 的值为 0-3,其他 col 值取自同一张表上对应的 OldRecordID。当我运行它时,它只运行第一个 INSERT SELECT 语句,然后将其他语句作为它们自己的 SELECT 语句运行。我在连接这些方面是否遗漏了什么?我总是可以多次运行它并每次更改值,但我想知道是否有办法避免这种情况。我感谢和帮助或有用的提示。

谢谢

【问题讨论】:

    标签: sql sql-server-2008-r2


    【解决方案1】:

    您可以与 Union 连接,将它们加入一个记录集:

    INSERT INTO table (col1, col2, col3, col4)
    
    SELECT (newRecordID, col2, col3, col4)
    FROM table WHERE col1 = oldRecordID AND col4 = 0
    union
    SELECT (newRecordID, col2, col3, col4)
    FROM table WHERE col1 = oldRecordID AND col4 = 1
    union
    SELECT (newRecordID, col2, col3, col4)
    FROM table WHERE col1 = oldRecordID AND col4 = 2
    union
    SELECT (newRecordID, col2, col3, col4)
    FROM table WHERE col1 = oldRecordID AND col4 = 3
    

    【讨论】:

    • 不,这不一定会做同样的事情 - 这将消除重复。建议UNION ALL,除非你知道你想消除重复。
    • 谢谢!这行得通,我按照 AB 的建议使用了 UNION ALL 语句。我最终选择了 Ricardo C 的解决方案,但这也很棒。感谢您的快速响应!
    【解决方案2】:
    INSERT INTO table (col1, col2, col3, col4)
    
    SELECT (newRecordID, col2, col3, col4)
    FROM table WHERE col1 = oldRecordID AND col4 IN(0,1,2,3)
    

    【讨论】:

    • 太棒了!这行得通。我最终使用了 UNION ALL 解决方案,因为我已经写了一堆 SELECT 语句。然后我删除了新条目并尝试了这种方式。可能会坚持使用此解决方案,因为它可以节省更多空间。谢谢!
    • @jlarson497 很高兴为您提供帮助。要么你选择我的,要么选择 Aaron 博士的,只是不要忘记接受一个作为答案;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多