我有两个表,它们的结构相同,但是内容不同。每个表的第一列是一个自动增量ID。

我想做的是将一个表中的一些行插入另一个表中。但是,id列应在目标表中自动设置,而不是从源表中复制。

到目前为止,我正在使用类似:

INSERT INTO table_1
    SELECT
       id,
       column_2,
       column_3,
       column_4
    FROM table_2
    WHERE column_4 = 'a value'


我不能仅从表2中选择ID,如上面所示,因为这会在表1中创建重复的ID。

我尝试用“ (SELECT MAX(id)+1 FROM table_1) AS id”替换“ id”。那会获得正确的ID,但不会为要插入的每一行增加ID。

我已经尝试过(SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA_TABLES WHERE SCHEMA_TABLE = 'table_1') AS id,但是只是说“无法解析列AUTO_INCREMENT”而失败

我已经尝试过LAST_INSERT_ID() as id。这实际上在我第一次运行该语句时有效,但是进一步尝试失败,并显示消息“键PRIMARY的重复条目875”

最后,我尝试将列完全省略,但是随后我收到一条错误消息,指出列数不匹配。

谁能对此有所启示?我应该指出,我需要纯MySQL。我不在PHP的上下文中。

谢谢

最佳答案

您必须指定要插入的列,然后可以将其省略:

INSERT INTO table_1 (column_2, column_3, column_4)
  SELECT column_2, column_3, column_4
    FROM table_2
    WHERE column_4 = 'a value'

10-07 12:31
查看更多