在SQL中复制一行?

时间:2009-03-05 15:00:08

标签: sql

好的我有一个包含两列的表,userID和courseID。它用于为用户分配培训课程。它看起来像这样:

userid   courseid
0          1
0          3
0          6
1          1
1          4
1          5

因此将用户0分配给课程1,3,6,将用户1分配给1,4 5

无论如何我需要将每个分配给6的用户创建一个具有该userid和courseid 11的新行,基本上将当前分配给6的每个用户分配给11

由于某种原因(我没有创建这个数据库)两行被标记为主键,而我尝试过的一些语句因为这个而抛出错误,这笔交易究竟是什么?

哦,也许是因为有一些用户已被分配到11,所以它可能会窒息?

请帮助

3 个答案:

答案 0 :(得分:53)

Insert Into TableName (userID, courseID)
  Select userID, 11 From TableName Where courseID=6;

另外,我对你的评论感到有些困惑,两者都是主键。这两行都可以是主键的 part ,或者两者都可以是唯一键,但它们不能都是主键。就错误而言,可能是因为查询试图插入与现有行重复的行。为了消除这种可能性,你可以这样做:

Insert Into TableName (userID, courseID)
  Select userID, 11 From TableName Where courseID=6 
     AND (userID not in (Select userID From TableName Where courseID=11))

根据您的数据库,这也可以起作用:

INSERT OR IGNORE INTO TableName (userID, courseID)
    SELECT userID, 11 FROM TableName WHERE courseID=6;

无论如何,你去了。

答案 1 :(得分:2)

insert into TableName (userId, courseId)
    select userId, 11
    from   TableName
    where  courseId = 6
    and    not exists (
               select 1
               from   TableName nested
               where  nested.userId = TableName.UserId
               and    nested.courseId = 11
           )

选择分配给courseId 6但尚未分配给courseId 11的所有用户,并为courseId 11在表中插入新记录。

答案 2 :(得分:-2)

这应该有所帮助:

INSERT
INTO   [table]
       (
              userid,
              courseid
       )
SELECT userid,
       11
FROM   [table]
WHERE  courseid    = 6
   AND userid NOT IN
                     (SELECT userid
                     FROM    [table]
                     WHERE   courseid = 11
                     );

这将选择课程6中的所有用户而不是课程11,并将课程11添加到表格中。