我有两张桌子的结构相同,但内容不同。每个表的第一列是自动增量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。
我试过更换“id'用:(SELECT MAX(id)+1 FROM table_1) AS id
。这会获得正确的ID,但不会为要插入的每一行增加它。
我已尝试过(SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA_TABLES WHERE SCHEMA_TABLE = 'table_1') AS id
,但却未能说出“无法解析列AUTO_INCREMENT'
我试过了LAST_INSERT_ID() as id
。这实际上是在我第一次运行该语句时有效,但是进一步的尝试失败了,并且消息' Duplicate entry 875 for key PRIMARY'
最后,我试图将列完全删除,但我收到一条错误消息,指出列数不匹配。
任何人都可以对此有所了解吗?我应该指出我需要纯MySQL。我不在PHP的上下文中。
由于
答案 0 :(得分:1)
您必须指定要插入的列,然后您可以将其删除:
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'
答案 1 :(得分:0)
您可以在ID
语句中指定除INSERT
之外的所有列,例如:
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'
在table2中自动生成ID
,它将自动获取值。