插入时带有select的三重记录

时间:2014-07-30 23:01:49

标签: mysql group-by insert-select

以下代码创建了三重记录,但是如果我删除了事务命令,它会按预期工作,只为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有重复的值。
  • 仅运行select查询只返回所需的结果(无重复项)。
  • 似乎insert into() select忽略了distinctgroup by条款。

修改

我发现出现此问题是因为MySQL忽略了GROUP BY查询中的INSERT INTO ... SELECT子句。 有没有办法将这些记录分组到插入?

1 个答案:

答案 0 :(得分:0)

我发现出现此问题是因为MySQL忽略了GROUP BY查询中的INSERT INTO ... SELECT子句。

不确切知道原因,但如果我使用的查询没有使用GROUP BYDISTICT,那就可以了。