使用额外变量从另一个表插入表中

时间:2012-02-03 14:16:19

标签: sql

我有两张桌子

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;

但这不起作用。任何人都可以想到一种方法,我可以得到第一个参数作为记录的计数,显然每次添加新记录时都需要增加一个。

2 个答案:

答案 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