oracle資料庫,A表匯入資料B表方法

2022-08-05 16:21:16 字數 910 閱讀 8538

a表的資料越來月龐大了,從1萬條資料到10萬條,從10萬條資料到100萬天等等,這時原來查詢a表資料的業務就顯得很吃力了。這時候會考慮到將a表的資料經過篩選在匯入b表,然後查詢b表就可以了。a表不用來查詢,這樣可以減少資料庫的負擔。

a表有好多欄位暫命名a,b,c,d,e,f,g,h,i,j,b表有5個欄位a,b,c,d ,e假設我要查詢a表資料:

select a.a,a.b,max(a.c),sum(a.d) from x as a group by a.a,a.b 。將查詢到的所有資料插入b表,b表的第一個地段使用了sequence(暫叫a_seq).那麼匯入資料的語句則為:

insert into b(a,b,c,d,e)  select a_seq.nextval,a.a,a.b,max(a.c),sum(a.d) from x as a group by a.a,a.b

沒錯,匯入語句就是insert into tablea(...) select * from tableb (其中tableb中*每個欄位要跟tablea屬性一直),如果a表要用到排序的話,如果sequence使用不當,有可能會匯入不了,假如我要這樣寫:

insert into b(a,b,c,d,e)  select a_seq.nextval,a.a,a.b,max(a.c),sum(a.d) as s from x as a group by a.a,a.b order by s 。則資料庫會報不允許使用序列的錯誤。我們必須先查詢b表資料,再在外面加一層包裝就可以正確執行了:

insert into b(a,b,c,d,e) select a_seq.nextval,m.a,m.b,m.c,m.maxt,m.s from(

select a.a,a.b,max(a.c) as maxt,sum(a.d) as s from x as a group by a.a,a.b order by s )