數據庫—面試題

有個公司向我們的學生出了個有關於數據庫的面試題,分析了一下,總共整出來兩條解決方案,和大家分享分享

題:兩張表  create table tbA(aid  int,dis int) create table tbB( bid int,com int)

tbB表 根據bid的分組,求com的和的 結果  填充到tbA的dis中,條件是 tbA的aid 與tbB的bid 相等

解決問題思路一:

遊標能做到快速遍歷,優點:讀取速度快,效率高

對tbB表的bid分組,求com的和 將這個結果集遍歷,然後當tbA的aid與 這個結果集的bid相等的時候,就對tbA的dis 字段進行修改

declare @id int  ---定義變量1

declare @sum int  ---定義變量2

declare cu_test cursor  ---定義一個遊標

for

select   bid,sum(com) from tbB group by bid   --對tbB表的bid分組,求com的和

open cu_test   --------打開遊標

fetch next from  cu_test into @id,@sum  ------取遊標的第一行數據到變量@id,@sum中

while(@@fetch_Status=0) --只要遊標的讀取狀態爲0,就繼續循環

begin

update tbA set dis=@sum where aid=@id  

fetch next from cu_test into @id,@sum

end

close cu_test   ---關閉遊標

deallocate cu_test ------也可以刪除遊標

解決思路二:直接用sql語句來實現,總體是個update,這樣做和遊標比起來,數據如果很多,效率很顯然就低

關於幾個結果集以上的不同的數據源(sqlserver)修改模板爲:

update table1 set colum1=table2.column
    from  table1,table2
    where table1.column=table2.coulumn    ---條件

所以我們的解題思路也出來了:

update tba set dis=tb.com from
    (select bid, SUM(com)as com from tbb group by bid) tb,tba
    where tba.aid=tb.bid

以上兩種思路,僅供參考

順便再把不同數據源的數據集導入 的 insert into 語句模板做一下備註:

insert into  表名1(列名1,列名1...)

select 列名11,列名22...

from 表名1,表名2

where 條件

結果集存入臨時表模板:

select 列名1,列名2,列名3...  into  #table  --臨時表

from

結果集 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章