1

2つの列が変更された状態で、いくつかのデータを同じテーブルにコピーして戻すテーブルがあります。

例えば:

TableMusic

titleid   musicid  tap_id            value

1234         1      3                 this is music
1324         1      3                 this is music test

titleidと値をmusicid=3で同じテーブルに書き戻したい

ここで、インデックス付けされた列はtitleid、musicidです。

次のスクリプトを実行しましたが、エラーが発生しました:一意のインデックス「pk_tablemusic」を使用してオブジェクト「tablemusic」に重複するキー行を挿入しようとしました

insert into tablemusic (titleid, musicid, value )
  select titleid, 3, value
  from tablemusic
  where musicid=1

私はここで何が間違っているのですか?誰かが仕事を成し遂げるためにきれいなスクリプトを思い付くことができますか?

以下は、1つのtitleIDのDBからの抜粋です。

titleid   musicid    tap_id              value

462847        1        3               this is my music value 
462847        2        1    
462847        3        1    
462847        4        1     

これはすべてのtitleidで同じです。今、私がやりたいのは、値をmusicid=1からmusicid=3にコピーし、いつかtap_idを3に変更することです。これで、達成したいことが十分に明確になることを願っています。

最終結果は達成したい:

titleidmusicidtap_id値

462847        1        3               
462847        2        1    
462847        3        3               this is my music value 
462847        4        1     
4

2 に答える 2

0

これは、上記のマークの回答に基づいたスクリプトで、いくつかの変更が加えられています。ありがとうマーク - あなたは私のヒーローです。

まず、次のスクリプトを実行しました。

musicid=3 の tablemusic から削除

上記の後、次のスクリプトを実行しました。

tablemusic に挿入 (titleid、musicid、tap_id、value) 選択 titleid、3、3、値
musicid=1 の tablemusicから

これにより、上記の質問に示されているように、達成したい結果が得られます。

于 2012-12-31T07:43:04.453 に答える
0

複雑なのは、いくつかのレコードが存在するため、単純な挿入を試みるとキーが複製され、エラーが発生することです。ここでしなければならないことは、クエリを 2 つのパーツに分割することです。

  1. 存在する musicid = 3 の行を更新します
  2. music id=3 が存在しない行を挿入します
于 2012-12-30T14:29:55.007 に答える