我有两张桌子
Table A
(
unique id, -- sum of the records
Data1,
Data2
)
Table B
(
Data1,
Data2
)
我需要从表B插入表A并添加记录。我有一个简单的插入:
Insert into A select * from B
但由于唯一ID,这不起作用。
我尝试过类似的事情:
INSERT INTO A
SELECT 1+SELECT MAX(UniqueID) FROM A,temp.*
FROM B temp;
但这不起作用。任何人都可以想到一种方法,我可以得到第一个参数作为记录的计数,显然每次添加新记录时都需要增加一个。
答案 0 :(得分:1)
只需将id
设置为表声明中的自动增量列:
create table A (
id int primary key auto_increment,
Data1 <sometype>,
Data2 <sometype>
);
然后您可以插入来自B
的行:
insert into A (Data1, Data2)
select Data1, Data2 from B
A
中的每个新行都会为id
获得一个新的唯一自动增量值。
注意:没有经历过plsql,但这就是我用MySQL做的事情。
答案 1 :(得分:1)
在过去的Oracle DB中,我使用序列为表A创建主键ID,因此您应该能够这样做:
CREATE SEQUENCE A_SEQ
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
insert into A (id, Data1, Data2) select A_SEQ.nextval, Data1, Data2 from B
有关详细信息,请参阅此网址:http://www.techonthenet.com/oracle/sequences.php
**在SQL Server中,您可以使用列上的“autoincrement”属性执行相同操作。 ** SQL Server 2012也将获得类似的Sequence机制,尽管它的语法与此完全不同。
**编辑:我的偏好仍然是使用序列,但作为替代方案,重新编写原始SELECT语句可能会有所帮助:
INSERT INTO A (UniqueID, Data1, Data2)
SELECT
(SELECT MAX(UniqueID) + 1 FROM A)
, Data1
, Data2
FROM B