根據(jù)多條件查詢臨時(shí)表 想得到不同結(jié)果集的方法
更新時(shí)間:2009年11月08日 23:44:44 作者:
很多情況下,需要采用多個(gè)參數(shù)來查詢一張臨時(shí)表,每個(gè)參數(shù)都要求得到不同的臨時(shí)表結(jié)果集。而往往某些參數(shù)并不對應(yīng)這張臨時(shí)表中的字段,而是對應(yīng)與該臨時(shí)表ID關(guān)聯(lián)的另一張表的字段。
當(dāng)我寫下如下sql語句時(shí),我得到了輸入@c參數(shù)時(shí)想得到的結(jié)果集。
select * from @tb t where t.id in (select id from tb where f = @c)
但如果有@a,@b,@c,而它們分別想從@tb中得到不同的結(jié)果集,例如
if @a is not null
begin
--得到@a想得到的
end
if @b is not null
begin
--得到@b想得到的
end
if @c is not null
begin
--得到@c想得到的
end
這樣做好像沒什么問題,但如果@a和@b是一起的,甚至是@a,@b,@c,@d,@e,@f等等N多種條件組合,這樣就不好辦了。所以必須先build好@tb,最后一次性查詢
--構(gòu)造@tb
select * from @tb
假如我已經(jīng)通過@a,@b得到了一種@tb結(jié)果集,當(dāng)我再次使用@c進(jìn)行條件判斷時(shí),這樣就會覆蓋剛才的結(jié)果。
可以采用“刪除不符合條件的記錄”的方法來做,由于@tb已經(jīng)得到了@a,@b想得到的結(jié)果,所以只要刪除掉不符合@c的結(jié)果就行了。完。
if @c is not null
begin
delete c from @tb c where c.id not in (select id from tb where f = @c)
end
select * from @tb
select * from @tb t where t.id in (select id from tb where f = @c)
但如果有@a,@b,@c,而它們分別想從@tb中得到不同的結(jié)果集,例如
復(fù)制代碼 代碼如下:
if @a is not null
begin
--得到@a想得到的
end
if @b is not null
begin
--得到@b想得到的
end
if @c is not null
begin
--得到@c想得到的
end
這樣做好像沒什么問題,但如果@a和@b是一起的,甚至是@a,@b,@c,@d,@e,@f等等N多種條件組合,這樣就不好辦了。所以必須先build好@tb,最后一次性查詢
--構(gòu)造@tb
select * from @tb
假如我已經(jīng)通過@a,@b得到了一種@tb結(jié)果集,當(dāng)我再次使用@c進(jìn)行條件判斷時(shí),這樣就會覆蓋剛才的結(jié)果。
可以采用“刪除不符合條件的記錄”的方法來做,由于@tb已經(jīng)得到了@a,@b想得到的結(jié)果,所以只要刪除掉不符合@c的結(jié)果就行了。完。
復(fù)制代碼 代碼如下:
if @c is not null
begin
delete c from @tb c where c.id not in (select id from tb where f = @c)
end
select * from @tb
您可能感興趣的文章:
- sql server 臨時(shí)表 查找并刪除的實(shí)現(xiàn)代碼
- SQLServer中臨時(shí)表與表變量的區(qū)別分析
- sqlserver 臨時(shí)表的用法
- sqlserver 臨時(shí)表 Vs 表變量 詳細(xì)介紹
- sqlserver 動態(tài)創(chuàng)建臨時(shí)表的語句分享
- 關(guān)于sqlserver 2005 使用臨時(shí)表的問題( Invalid object name #temptb)
- mysql復(fù)制中臨時(shí)表的運(yùn)用技巧
- mysql 臨時(shí)表 cann''t reopen解決方案
- SQL Server 向臨時(shí)表插入數(shù)據(jù)示例
- 淺析SQL server 臨時(shí)表
- MySQL使用臨時(shí)表加速查詢的方法
- sql server創(chuàng)建臨時(shí)表的兩種寫法和刪除臨時(shí)表
- 對比Oracle臨時(shí)表和SQL Server臨時(shí)表的不同點(diǎn)
相關(guān)文章
在SQL Server 2005中創(chuàng)建CLR存儲過程的詳細(xì)介紹
本篇文章是對在SQL Server 2005中創(chuàng)建CLR存儲過程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06SQL Server 利用觸發(fā)器對多表視圖進(jìn)行更新的實(shí)現(xiàn)方法
這篇文章主要介紹了SQL Server 利用觸發(fā)器對多表視圖進(jìn)行更新的實(shí)現(xiàn)方法,需要的朋友可以參考下2016-10-10SQL Server 遠(yuǎn)程更新目標(biāo)表數(shù)據(jù)的存儲過程
這篇文章主要介紹了SQL Server 遠(yuǎn)程更新目標(biāo)表數(shù)據(jù)的存儲過程,適用于更新列名一致,主鍵為Int類型,具體實(shí)例代碼大家參考下本文2018-05-05sql server判斷數(shù)據(jù)庫、表、列、視圖是否存在
這篇文章主要介紹了sql server判斷數(shù)據(jù)庫、表、列、視圖是否存在的方法,需要的朋友可以參考下2014-07-07判斷字段是否被更新 新舊數(shù)據(jù)寫入Audit Log表中
客戶要求,要對一個(gè)敏感數(shù)據(jù)表進(jìn)行Audit跟蹤。如果記錄被更新時(shí),要把舊新保存起來,是誰更改了記錄,什么時(shí)候更新的等相關(guān)信息。還有一個(gè)主要問題就是客戶不確定具體要跟蹤那個(gè)字段,希望自己決定2012-01-01sql server中隨機(jī)函數(shù)NewID()和Rand()
在SQL語言中,隨機(jī)函數(shù)NEWID和rand()用法并不相同,下面就將為您示例分析這兩個(gè)隨機(jī)函數(shù)的區(qū)別,供您參考,希望對您深入理解SQL函數(shù)能起到作用2015-10-10SQL Server在AlwaysOn中使用內(nèi)存表的“踩坑”記錄
這篇文章主要給大家介紹了關(guān)于SQL Server在AlwaysOn中使用內(nèi)存表的一些"踩坑"記錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。2017-09-09