以下代码创建了三重记录,但是如果我删除了事务命令,它会按预期工作,只为in
子句中的每个数字插入一条记录:
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
子句。
有没有办法将这些记录分组到插入?
答案 0 :(得分:0)
我发现出现此问题是因为MySQL忽略了GROUP BY
查询中的INSERT INTO ... SELECT
子句。
不确切知道原因,但如果我使用的查询没有使用GROUP BY
或DISTICT
,那就可以了。