0

in次のコードは 3 重のレコードを作成しますが、トランザクション コマンドを削除すると、期待どおりに機能し、句の番号ごとに 1 つのレコードのみが挿入されます。

insert into table1(id2, col) 
select col2, 1 
from table2
where col2 in (1, 2, 3) and col2 not in (select id2 from table1 where col = 1)
group by col2;

これは MySQL のバグですか? 同じステートメントによって、MSSQL Server でレコードが重複することはありません。
レコードを複製せずに、トランザクションをオンにしてこのクエリまたは同様のクエリを実行することは可能ですか?

クエリ前のデータ例:

table1
id | id2 | col
==============
 -- empty --

table2
id | col2
==============
1  | 1
2  | 1
3  | 1
4  | 2
5  | 2
6  | 2
7  | 3
8  | 3
9  | 3

クエリ後のデータ例:

table1 (* duplicated records I don't want)
id | id2 | col
==============
1  | 1   | 1
2  | 1   | 1  *
3  | 1   | 1  *
4  | 2   | 1
5  | 2   | 1  *
6  | 2   | 1  *
7  | 3   | 1
8  | 3   | 1  *
9  | 3   | 1  *

table2 keeps the same

観測:

  • table2値が重複しています。
  • 選択クエリを単独で実行すると、目的の結果のみが返されます (重複はありません)。
  • それはinsert into() select無視しdistinctgroup by句のようです。

編集:

この問題は、MySQL がクエリのGROUP BY句を無視するために発生することがわかりました。INSERT INTO ... SELECT挿入時にこのレコードをグループ化する方法はありますか?

4

1 に答える 1