1. 程式人生 > 其它 >多條件and查詢遇到的問題

多條件and查詢遇到的問題

技術標籤:sql資料庫

多條件and查詢遇到的問題

問題描述:如下圖所示:
在這裡插入圖片描述
在做多條件and查詢時會遇到這種情況,因為是第一次做這個查詢功能,所以沒有想那麼深,很自然地用了

select * from table where 欄位1=“${}” and 欄位2 = “${}” and 欄位3 = “${}.......
//${}表示輸入框中輸入的值,只是一種表示

在測試時就發生了問題,當把查詢條件全部輸入值時才能查到資料,當沒有全部輸入值時就查不到資料。後來想了一下,多個and連線查詢,查詢到的資料是需要全部滿足這些and條件的,當在查詢介面沒有全部輸入查詢值時,在sql層面就表現為:欄位 = null 或欄位 = “ ”,而在資料表中是沒有這些資料存在的,所以最終的結果就是查不到資料。

後來想了一下,要完成這個功能需要做的就是當and條件的輸入值為空時,就讓這個and條件失效,從而不對其他and條件查詢產生影響。所以小編就在and條件失效這個路子上走了好久,在網上搜了許多有關的解決思路。但礙於小編目前水平有限,大段sql我有點看不懂,所以也無法直接套用。

後來轉換了思路,之前一直想的是值為空時讓所屬的and條件語句失效,但其實最終的目的是當該and條件值為空時不對其他and條件查詢產生影響。可以在每個and條件里加個or,使每個and條件分為兩種情況,值為空和值非空
如下:

select * from nych_fxjy where 1=1
and ('${建立人}' = ''
or create_user = '${建立人}') and ('${建立時間}' = '' or create_time like '${建立時間}%') and ('${責任部門}' = '' or responsibility_depart = '${責任部門}') and ('${風險機遇型別}' = '' or riskOrOppor_Type = '${風險機遇型別}') and ('${風險機遇描述}' = '' or riskOrOppor_descripition like '%${風險機遇描述}%')

這樣一來,當傳入的值為空時,該and條件查詢對其他and條件查詢是不產生影響的。