0

あるテーブルから別のテーブルに個別の値を挿入しようとしています。ターゲット テーブルには主キーがあり、ソースとターゲットstudentidを区別して実行すると、ロードは成功します。idを含むソースからターゲットに一連の列をロードしようとするとstudent_id、エラーunique constraint violationed が発生します。の主キーである target の制約は 1 つだけstudentidです。

私のクエリは次のようになります(単なる例)

insert into target(studentid, age, schoolyear)
  select distinct id, age, 2012 from source 

上記のクエリがエラーを返すのはなぜですか?以下のクエリは完全に正常に機能します

insert into target(studentid)
  select distinct id from source 

これのトラブルシューティングを手伝ってください。

御時間ありがとうございます。

4

1 に答える 1

2

最初のクエリでは、3 つの列の異なる組み合わせを選択しています。つまり、

select distinct id, age, 2012 from source

個別の ID だけではありません。このような場合、ID が重複する可能性があります。たとえば、上記のクエリはこれに有効です

id age
1   23
1   24
1   25
2   23
3   23

しかし、2 番目のクエリでは、個別の ID のみを選択しています

select distinct id from source

したがって、これは次のように返されます。

id
1
2
3

この場合、重複する方法はなく、ターゲットへの挿入は失敗しません。

ターゲットに制約を付けて一括挿入を本当に実行したい場合は、集計関数を使用してください

select id, max(age), max(2012) group by id from source

または、ソースからターゲットへのレコードを失いたくない場合は、ターゲットの制約を削除して挿入します。

お役に立てれば

于 2012-12-29T12:26:43.173 に答える