将行从一个表插入到另一个表中,同时创建增量值?

时间:2011-05-10 11:13:20

标签: mysql sql

编辑: OOPS,显然在我的测试表中,我忘了将id设置为autoincremental。设置后,查询按预期工作。对不起大家!

我有两个表,来源目的地

来源包含字段 field1 field2

Dest的字段为 id field1 field2 。 Id是主要索引和自动增量。

我尝试了以下查询:

INSERT INTO dest (field1, field2)
SELECT field1, field2
FROM source
WHERE NOT EXISTS(SELECT * 
                 FROM dest 
                 WHERE (source.field2=dest.field2)
                 );

但是,每个复制行中的id为0。

如何在我的查询中说我想复制field1和field2,并为id创建一个新的自动增量值?

2 个答案:

答案 0 :(得分:3)

您可以使用左连接重写exists语句:

INSERT INTO dest (field1, field2)
SELECT field1, field2
FROM source
LEFT JOIN dest
ON source.field2 = dest.field2
WHERE dest.field2 IS NULL;

id也应自动自动增加。如果没有,请检查它在表的定义(show create table dest)中的作用。

答案 1 :(得分:0)

如果dest.id声明为AUTO_INCREMENT,则查询应增加SHOW CREATE TABLE dest

请发布

的输出
field2

另外,如果您只想将dest的唯一值放在dest.field2中,则可以将UNIQUE声明为INSERT IGNORE INTO dest SELECT field1, field2 FROM source ,然后使用它:

{{1}}