【问题标题】:Insert rows from one table into another table, while creating the incremental values?将一个表中的行插入另一个表,同时创建增量值?
【发布时间】:2011-05-10 11:13:19
【问题描述】:

编辑: 哎呀,显然在我的测试表中,我忘记将 id 设置为自动增量。设置后,查询按预期工作。对不起大家!

我有两个表,SourceDest

来源具有字段 field1field2

Dest 具有字段 idfield1field2。 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 创建一个新的自动增量值?

【问题讨论】:

  • 你确定dest.id上有一个auto_increment吗?

标签: mysql sql


【解决方案1】:

你可以用左连接重写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)。

【讨论】:

  • 糟糕,在阅读了您的评论后,我意识到我忘记在我的测试表中将 id 设置为自动增量...所以原始查询有效。
【解决方案2】:

如果声明为AUTO_INCREMENT,则查询应递增dest.id

请张贴输出

SHOW CREATE TABLE dest

另外,如果您只希望 field2 的唯一值出现在 dest 中,您可以将 dest.field2 声明为 UNIQUE 并使用它:

INSERT IGNORE
INTO    dest
SELECT  field1, field2
FROM    source

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 2013-08-16
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多