SQL語句技巧 查詢時巧用OR實現邏輯判斷

2021-09-20 13:57:38 字數 2503 閱讀 2180

首先看以下sql邏輯語句塊:

declare

@fieldname

varchar(50

)declare

@fieldvalue

nvarchar(100

)set

@fieldname='

chassisno'--

這裡可傳入chassisno,plateno,owner,contacttelno其中之一或不傳

set@fieldvalue='

zuowenjun'if

@fieldname='

chassisno

'begin

select

*from tablename where chassisno=

@fieldvalue

endelse

if@fieldname='

plateno

'begin

select

*from tablename where plateno=

@fieldvalue

endelse

if@fieldname='

owner

'begin

select

*from tablename where

[owner]=

@fieldvalue

endelse

if@fieldname='

contacttelno

'begin

select

*from tablename where contacttelno=

@fieldvalue

endelse

begin

select

*from

tablename

end

現在如果需要用一句sql語句就要實現上述邏輯判斷並查詢結果,大家可能會想到採用如下拼接的方法實現:

declare

@sqltext

nvarchar(2000

)set

@sqltext='

select * from tablename where '+

@fieldname+'

='''

+@fieldvalue

+''''

execute (@sqltext)

雖然這樣看起來確實能實現邏輯判斷並查詢結果,但看起來不夠直觀,修改麻煩且容易出錯,而且有一定的侷限性,因為這裡@fieldname與表字段相同,拼接相對容易些,若不相同的情況下,那就無法實現了,所以我這裡採用了另一種方法,效率暫且不說,但絕對簡單易用而且夠靈活,請看如下sql語句:

select

*from tablename a where1=

1--(如果需要其它條件則用其它條件,否則可以這樣或不要,如果不要則下面的第乙個and需去掉)

and ((@fieldname='

chassisno

'and a.chassisno=

@fieldvalue) or (@fieldname

<>

'chassisno

') )

and ((@fieldname='

plateno

'and a.plateno=

@fieldvalue) or (@fieldname

<>

'plateno

') )

and ((@fieldname='

owner

'and a.[

owner]=

@fieldvalue) or (@fieldname

<>

'owner

') )

and ((@fieldname='

contacttelno

'and b.contacttelno=

@fieldvalue) or (@fieldname

<>

'contacttelno

') )

經驗證這條sql語句可以實現邏輯判斷並查詢結果,而且就算@fieldname與表字段不相同,我們也可以直接更換相應的字段即可,現在來簡要說明一下其原理:

and ((@fieldname = 'chassisno' and a.chassisno=@fieldvalue) or (@fieldname<>'chassisno') )

因為是and關聯,所以後面括號裡面的條件是必須滿足,又因為括號裡面採用了or關聯,所以括號裡面的兩邊的條件是可以符合乙個即可的,翻譯一下就是,若@fieldname = 'chassisno'時,則要求a.chassisno=@fieldvalue,否則只要@fieldname<>'chassisno'時,則忽略掉前前面的關聯條件。注意他們的特點是互斥的,也就是or兩邊的條件只能滿足其中之一即可,不知道大家明白沒有,當然如果有更好的方法或不同的意見歡迎交流,共同進步!

更多it相關的文章,歡迎光臨我的個人**:

1 許多表同時查詢時,sql語句書寫技巧

步驟 確定目標 確定要查詢的資料時那幾個字段。例如 要查 sname,sage,tname,cname.資料分析 這些資料分別在那幾張表中,並以其中乙個為基礎寫初始sql語句。例如 select sname,sage from student where address like 杭州 一步步新增其...

sql語句交集情況的查詢技巧

開發過程中涉及到了查詢字串交集的情況,不會寫這樣的sql,上網一搜,還真有例子。現在分享給大家。也許某一天你就會用到,交集表的字段就是 name no a 2,9 b 8,10 字串是str 0,1,2,3,4 接下來就是查 no欄位裡跟str裡有交集的記錄 查詢的結果就是name a的,no 2,...

編寫sql語句技巧

一 今天遇到乙個帥選資料的問題,sqlserver儲存過程中,加了乙個新的篩選資料的條件,不打亂原來的取資料的模式下把新的功能新增進去,用一段複合型的exists語句就可以解決問題 and 原先的sql 語句 過濾自助機不顯示的科室 專家資料 add by aorigel 20101020 andn...