将table2中每个元素的值添加到table1中,并将table1中的MAX(id)+1用作table2 id

时间:2018-10-18 09:42:46

标签: mysql max

我有table1table2,并且想要执行以下操作:

INSERT INTO table1 (ID, OWNER_ID, NAME) SELECT (SELECT MAX(ID) FROM table1) + 1, ID, 'value' FROM table2

上面的查询不起作用并返回:

Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.table1(ID)"; SQL statement:

请帮忙吗?

table1

| ID | OWNER_ID | NAME |
| --- | ---- | --- |

ŧable2

| ID | OWNER_ID_REF | NAME |
| --- | ---- | --- |

谢谢

3 个答案:

答案 0 :(得分:1)

set @i:=(SELECT MAX(ID) FROM table1);
INSERT INTO table1 (ID, OWNER_ID, NAME) SELECT @i:=@i+1, ID, 'value' FROM table2

尝试此查询,它将正常工作

答案 1 :(得分:0)

看起来IDtable1中的主键列。您当前的插入内容很可能会多次插入相同的ID值,因为max table2中的每个记录的max子查询都将具有相同的值。假设ID是自动递增的,那么您可能始终不应该为其分配值。这是一个选择:

INSERT INTO table1 (OWNER_ID, NAME)
SELECT ID, 'value'
FROM table2;

答案 2 :(得分:0)

您正在使用 SELECT(从table1选择SELECT MAX(ID))+ 1,ID,从table2获得'value'

当您插入通过选择时 最大(ID)+1 给样本值table2的所有记录

使用类似这样的内容...

创建表#tt(id int主键,名称varchar(200))

声明@vaue int =(从#tt中选择max(id))

插入#tt 选择row_number()over(按ID排序)+ @vaue ,名称来自#tt