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
無視しdistinct
てgroup by
句のようです。
編集:
この問題は、MySQL がクエリのGROUP BY
句を無視するために発生することがわかりました。INSERT INTO ... SELECT
挿入時にこのレコードをグループ化する方法はありますか?