【问题标题】:sql insert multiple rows from another tablesql从另一个表中插入多行
【发布时间】:2020-05-14 13:37:25
【问题描述】:

我有桌子:

ContainerSubTypes (Id, Name) 有很多记录,

WorkAreas (Id, Name)只有一行,

WorkAreaContainerSubTypes table (Id, WorkAreaId, ContainerSubTypeId) - 空表。

我需要将数据插入到WorkAreaContainerSubTypes 表中,它应该是这样的:

(1, 1, containersubtype1_id)
(2, 1, containersubtype2_id)
(3, 1, containersubtype3_id)

我正在尝试 sql 之类的:

INSERT INTO WorkAreaContainerSubTypes (WorkAreaId, ContainerSubTypeId)
    VALUES
    (1, (SELECT Id FROM ContainerSubTypes));

但是SELECT 查询有超过 1 行,它会抛出错误。 如何实现该插入?

【问题讨论】:

    标签: sql sql-server sql-insert


    【解决方案1】:

    VALUES表值构造函数指定一组行值表达式要构造成一个表,所以你需要一个不同的语句:

    INSERT INTO WorkAreaContainerSubTypes (WorkAreaId, ContainerSubTypeId)
    SELECT 1, Id 
    FROM ContainerSubTypes;
    

    作为附加说明,只有当SELECT Id FROM ContainerSubTypes 语句返回单行或没有行(可能带有可选的WHERE 子句)时,您才可以使用VALUES:

    INSERT INTO WorkAreaContainerSubTypes (WorkAreaId, ContainerSubTypeId)
    VALUES
       (1, (SELECT Id FROM ContainerSubTypes WHERE Name = 'Some name'));
    

    【讨论】:

      【解决方案2】:

      只需使用insert . . . select:

      INSERT INTO WorkAreaContainerSubTypes (WorkAreaId, ContainerSubTypeId)
          SELECT 1, Id
          FROM ContainerSubTypes;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        • 2015-07-15
        • 2018-07-27
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多