SQL語句強大的,完美的,使用它可以完成各種可能的需求。下邊就說說今天遇到的問題,一同事在做讀取數據時,碰到這樣的疑惑,分別從兩個表中讀取 數據,讀取的字段不一樣,但最後呈現的列都是一樣的。能否有辦法一次合並這兩個表中的數據到前台進行輸出呢?因為在Silverlight進行開發時,讀 取數據的操作都是異步操作,如果對於此過程,使用兩次查詢完成兩個表數據的讀取,除了浪費性能,在代碼的同步性上也有所下降,此問題的出現,我覺得SQL 肯定是可以的,就幫這同事處理之,果然很快就解決了,現分享給大家。
先說一下涉及到的兩個表:
考試表:ExamTB
涉及字段:EId int,EName varchar(50),SubjectId int,EStartTime datetime
任務表:TaskTB
涉及字段:TId int,TName varchar(50),SubjectId int,TStartTime datetime
當然這兩個表還有其他一些不一樣的字段,此處忽略,但查詢出來的就是如上字段,兩個表查詢出相同的東西,現在就是要把兩個查詢的結果合並到一個表中輸出出來,當然額外加一個字段Type標識是考試表,還是任務表中的數據,原始的想法:
select EId,EName ,SubjectId ,EStartTime ,1 as type from ExamTB
select TId ,TName ,SubjectId ,TStartTime ,2 as type from TaskTB
一看就明了,雖然從兩個不同的表中讀取數據,但顯示的結果都是一樣的,要是能從一個表出去,效果特好,想到連表把兩個表連在一個表,不行呀
沒有相互關聯的字段。此時想到的臨時表,對使用臨時表把記錄都存在一塊不就可以了。
怎麼存儲呢,不會用游標逐一循環表,實現插入吧,那也太折騰了,經分析不用使用此功能即可實現相應的功能。
具體代碼如下:
--創建用於存儲相同數據的臨時表
CREATE TABLE #TempTB (
TId int,
TName varchar(50),
SubjectId int,
TType int
)
--插入考試表數據,1表示是考試
insert into #TempTB(TId,TName,SubjectId,TType)
select EId,EName,SubjectId,EStartTime ,1
from ExamTB
--插入任務表數據,2表示此數據是來自任務表
insert into #TempTB(TId,TName,SubjectId,TType)
select TId,TName,SubjectId,TStartTime,2
from TaskTB
--輸出數據
select * from #TempTB
--刪除臨時表
drop table #TempTB
通過如上的方法,完成查詢相同數據內容,在同一個表的輸出,方法行之有效,當然涉及到相關業務邏輯,已經省略,此處只針對對應的需求,對涉及的關聯和各種業務邏輯,進行刪除。通過以上例子,是不是覺得SQL很能幫我們干可能涉及到的任務事情。
ok,大家有什麼好方法,多交流呀。