2009-03-05 79 views
24

好吧我有一個表有兩列,userID和courseID。它用於將培訓課程分配給用戶。它看起來像這樣:在SQL中複製一行?

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,所以它可能會窒息?

請幫助

回答

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

而且,我有點受您的評論混淆兩者都是主鍵。這兩行可以是主鍵的部分,或者兩者都可以是唯一鍵,但它們不能都是主鍵。就錯誤而言,這可能是因爲查詢試圖插入與現有行重複的行。爲了消除這種可能性,你可以這樣做:

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

GS - 這是一個有趣的結構 - 其中它工作嗎?它在SQL Server 2005中不起作用... – 2009-03-05 15:27:26

-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將它們添加到表中。

+0

嗯......這不起作用。根據定義,具有6的courseID的記錄不會具有11的courseID。您需要一個子查詢,如我在答案中所示。 – 2009-03-05 15:06:36

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