2013-01-04 84 views
0

我有此表的INSERT(字段1)+1(稱之爲tableA):生成MAX與多行

id (PK, autoincrement) 
field1 (integer) 
field2 (integer) 

我想從另一個表中插入一些記錄,像這樣:

現在
INSERT INTO tableA (field1, field2) 
SELECT *something*, tableB.field2 
FROM tableB; 

,我需要的是field1,每行,類似於在一個新的整數來填補如何id填充(類似「MAX(field1)+1」)。有沒有辦法做到這一點,也許使用子查詢?

回答

0

我想出了這一點:

SET @newVAL = (SELECT MAX(field1) FROM tableA); 
INSERT INTO tableA (field1, field2) 
SELECT @newVAL := @newVAL+1, tableB.field2 
FROM tableB 

的想法是得到field1 MAX值第一,它存儲在一個變量,然後增加它在每個所選行。

+0

所有的答案都與變量的說明:),不錯的工作 –

1

我不是100%肯定沒有這裏的任何併發的問題,但我會用這樣的觸發啓動:

CREATE TRIGGER ins_your_table BEFORE INSERT ON your_table 
FOR EACH ROW 
    SET new.field1=case when new.field1 is null then 
     coalesce((select max(field1)+1 from your_table),1) 
    else new.field1 end 
; 

insert into your_table (field1, field2) values (10, 1),(11, 2),(12, 3); 

select * from your_table; 

| ID | FIELD1 | FIELD2 | 
------------------------ 
| 1 |  10 |  1 | 
| 2 |  11 |  2 | 
| 3 |  12 |  3 | 

delete from your_table; 

insert into your_table (field1, field2) values (10, 1),(11, 2),(12, 3); 
insert into your_table (field2) values (4),(5),(6); 

select * from your_table; 

| ID | FIELD1 | FIELD2 | 
------------------------ 
| 1 |  10 |  1 | 
| 2 |  11 |  2 | 
| 3 |  12 |  3 | 
| 4 |  13 |  4 | 
| 5 |  14 |  5 | 
| 6 |  15 |  6 | 

查看this fiddle一些例子。

+0

+1我肯定學到了一些新的閱讀! – cambraca