根據(jù)多條件查詢臨時(shí)表 想得到不同結(jié)果集的方法
更新時(shí)間:2009年11月08日 23:44:44 作者:
很多情況下,需要采用多個(gè)參數(shù)來(lái)查詢一張臨時(shí)表,每個(gè)參數(shù)都要求得到不同的臨時(shí)表結(jié)果集。而往往某些參數(shù)并不對(duì)應(yīng)這張臨時(shí)表中的字段,而是對(duì)應(yīng)與該臨時(shí)表ID關(guān)聯(lián)的另一張表的字段。
當(dāng)我寫(xiě)下如下sql語(yǔ)句時(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
這樣做好像沒(méi)什么問(wèn)題,但如果@a和@b是一起的,甚至是@a,@b,@c,@d,@e,@f等等N多種條件組合,這樣就不好辦了。所以必須先build好@tb,最后一次性查詢
--構(gòu)造@tb
select * from @tb
假如我已經(jīng)通過(guò)@a,@b得到了一種@tb結(jié)果集,當(dāng)我再次使用@c進(jìn)行條件判斷時(shí),這樣就會(huì)覆蓋剛才的結(jié)果。
可以采用“刪除不符合條件的記錄”的方法來(lái)做,由于@tb已經(jīng)得到了@a,@b想得到的結(jié)果,所以只要?jiǎng)h除掉不符合@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
這樣做好像沒(méi)什么問(wèn)題,但如果@a和@b是一起的,甚至是@a,@b,@c,@d,@e,@f等等N多種條件組合,這樣就不好辦了。所以必須先build好@tb,最后一次性查詢
--構(gòu)造@tb
select * from @tb
假如我已經(jīng)通過(guò)@a,@b得到了一種@tb結(jié)果集,當(dāng)我再次使用@c進(jìn)行條件判斷時(shí),這樣就會(huì)覆蓋剛才的結(jié)果。
可以采用“刪除不符合條件的記錄”的方法來(lái)做,由于@tb已經(jīng)得到了@a,@b想得到的結(jié)果,所以只要?jiǎng)h除掉不符合@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 動(dòng)態(tài)創(chuàng)建臨時(shí)表的語(yǔ)句分享
- 關(guān)于sqlserver 2005 使用臨時(shí)表的問(wèn)題( 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í)表的兩種寫(xiě)法和刪除臨時(shí)表
- 對(duì)比Oracle臨時(shí)表和SQL Server臨時(shí)表的不同點(diǎn)
相關(guān)文章
SQL Server誤區(qū)30日談 第13天 在SQL Server 2000兼容模式下不能使用DMV
對(duì)于兼容模式已經(jīng)存在了很多誤解。80的兼容模式的數(shù)據(jù)庫(kù)是否意味著能夠附加或恢復(fù)到SQL Server 2000數(shù)據(jù)庫(kù)?當(dāng)然不是2013-01-01
SQL Server把某個(gè)字段的數(shù)據(jù)用一條語(yǔ)句轉(zhuǎn)換成字符串
這篇文章主要介紹了SQL Server把某個(gè)字段的數(shù)據(jù)用一條語(yǔ)句轉(zhuǎn)換成字符串,本文講解使用一條語(yǔ)句把字段中的數(shù)據(jù)查詢出來(lái)并以指定分割符組成字符串,需要的朋友可以參考下2015-07-07
Sql Server 2012完全卸載方法 只需8步輕松卸載
這篇文章主要為大家詳細(xì)介紹了Sql Server 2012完全卸載方法,八步輕松實(shí)現(xiàn)Sql Server 2012完全卸載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
SQL百萬(wàn)千萬(wàn)級(jí)最大表添加字段的實(shí)現(xiàn)
本文主要介紹了SQL百萬(wàn)千萬(wàn)級(jí)最大表添加字段,需要特別小心,以避免長(zhǎng)時(shí)間的表鎖定和潛在的性能問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04
利用 SQL Server 過(guò)濾索引提高查詢語(yǔ)句的性能分析
本文就給大家介紹一下 Microsoft SQL Server 中的過(guò)濾索引功能,本文通過(guò)場(chǎng)景模擬分析給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-07-07

