【问题标题】:Inserting multiple rows into some table using values from select statement使用 select 语句中的值将多行插入到某个表中
【发布时间】:2016-05-29 03:12:18
【问题描述】:

是否可以使用 select 语句中的值在一个表中插入多行?
一个例子:

INSERT INTO SomeTable (UserID, ModuleID, ModuleRights) VALUES 
      (u.UserId, 1, 15),
      (u.UserId, 2, 1),
      (u.UserId, 4, 3),
      (u.UserId, 8, 7)
SELECT * FROM Users u

【问题讨论】:

标签: sql sql-server


【解决方案1】:

是的,但您需要小心如何操作。在这种情况下,您似乎需要cross join

INSERT INTO SomeTable (UserID, ModuleID, ModuleRights)
    SELECT u.UserId, v.ModuleID, v.ModuleRights
    FROM Users u CROSS JOIN
         (VALUES (1, 15), 
                 (2, 1), 
                 (4, 3), 
                 (8, 7)
         ) v(ModuleID, ModuleRights);

【讨论】:

  • 最佳答案。非常感谢。
【解决方案2】:

使用选择语句插入多行

insert into tbl_teacher
    (fName,
    lName,
    email,
    cNo)
    select s.fName,
           s.lName,
           s.email,
           s.cNo 
    from tbl_student s

【讨论】:

  • 投反对票,因为这与 16 分钟前提交的 vtuhtan 的答案太相似了。答案的格式也很糟糕,但我不会对此投反对票。
【解决方案3】:
INSERT INTO SomeTable (UserID, ModuleID, ModuleRights) 
SELECT u.UserID, u.ModuleID, u.ModuleRights FROM Users u;

如果您的ModuleIDModuleRights 不属于users 表,则插入空值或虚拟值并根据需要进行替换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2018-02-17
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多