2009-03-05 16 views
24

OK userIDとcourseIDの2つの列を持つテーブルがあります。これは、トレーニングコースをユーザーに割り当てるために使用されます。それは次のようになります。SQLで行を複製しますか?

userid courseid 
0   1 
0   3 
0   6 
1   1 
1   4 
1   5 
ので、ユーザ0がコース1,3,6およびユーザ1が1に割り当てられているに割り当てられている

、4 5

は、とにかく、私は6に割り当てられているすべてのユーザーを取る必要がありますそのユーザーIDと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で動作しません... –

-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

うーん....これは動作しません。 courseIDが6のレコードは、定義上、courseIDが11もありません。答えに示すように、サブクエリーが必要です。 –

+0

ええ、私はそれを投稿して書き直すとすぐにそれを実現しました。しかし、私はパンチに殴られた。 – achinda99

+0

Ok - 私は私のdownvoteを離陸しています。私はちょうどライアンを混乱させたくないので、私はそれをdownvoteしなければならないように感じた。しかし、本当に、私は答えを提供したスレッドで答えを下降させることを嫌っています。だから、私はそれを取り除いてうれしいです! –

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

関連する問題