我有table1
和table2
,并且想要执行以下操作:
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 |
| --- | ---- | --- |
谢谢
答案 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)
看起来ID
是table1
中的主键列。您当前的插入内容很可能会多次插入相同的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