2016-12-14 128 views
-1

有多個記錄插入記錄的sql

例如:

ID Name subject cindex 
    1 abc mat  45 
    2 jjj scie  45 
    3 kkk geom  45 
    4 sdf eng  45 
    5 idf law  45 

現在我想插入相同的記錄,但有不同的cindex。我試過這個:

insert into b_table (ID,name,subject,cindex) values (+1,NULL,NULL,90) 
select name,subject from b_table where cindex=45 

這裏ID不是自動增量列。我試着用+1做..現在我覺得這個查詢是不正確的,所以我怎麼選擇記錄,並與不同cindex插入相同的記錄?

+0

如果你已經有1,2,3,然後加1,插入會嘗試插入2,3,4。重複的ID值! – jarlh

+0

告訴我們你得到 –

+0

不希望與不同的CINDEX顯然不同的ID .. –

回答

1

有一個子查詢,返回表的最大ID。將該值添加到每個選定的ID。

insert into b_table (ID,name,subject,cindex) 
    select id + (select max(id) from b_table), Name, subject, 90 
    from b_table where cindex = 45 
+0

複雜:/ ..我不明白爲什麼ü從表中選擇90作爲CINDEX因爲在表CINDEX 90沒有記錄? –

+0

難道你不想插入cindex 90而不是45? – jarlh

+0

是要插入90,而不是45。@ jarih –

1

不要插入任何東西ID列,如果是自動增量,用這個:

insert into b_table (id,name,subject,cindex) 
select (SELECT max(id) FROM b_table) + id,name,subject,90 from b_table where cindex=45 

編輯:對於澄清你在評論中提出的問題,拿這個表,例如:

ID, NAME 
1 super 
2 sagi 
3 josh 

SELECT id, name , 'bla bla bla' as constant_string, 45 constant_number 
FROM Table 

會輸出如下:

ID,name,constant_string,constant_number 
1 super 'bla bla bla' 45 
2 sagi  'bla bla bla' 45 
3 josh  'bla bla bla' 45 

當你選擇一個字符串或一個數字,它們不是從實際的表數據中選擇。它們是作爲「附加」到您的數據的常量值生成的。

+0

「ID不是自動增量」。 – jarlh

+0

出於某種原因,我已經把它讀作「ID是自動增量」 :) @jarlh – sagi

+0

但沒有90 CINDEX表一所以如何選擇90? –