编辑: 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创建一个新的自动增量值?
答案 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}}