多条件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条件查询是不产生影响的。