SQL中到底要不要用WHERE 1=1

                        SQL中到底要不要用WHERE 1=1

    当遇到多个查询条件且这些查询条件都有可能为空时,常用的方法是用<isNotEmpty >标签,例如:

<select id="countMkZgt" resultClass="java.lang.Integer" parameterClass="java.util.HashMap" >
		<![CDATA[	
			SELECT count(0) FROM (
				select mz.MZID, mz.MZNUM,mz.MZTMBQ, mz.MZFZ, mz.MZBCF, mz.MZFZXL, mz.MZBQ, mz.MEBID, mz.STID, mz.NJNAME,replace(WMSYS.WM_CONCAT(mzk.WONAME),',','<br/>')   WONAME 
				from MKZGT mz left join (select mzk.*,woname from MKZGTKWWAYINFO mzk,KWWAYINFO wo where wo.woid = mzk.woid) mzk on mzk.mzid = mz.mzid
				 where 1=1 group by mz.MZID, mz.MZNUM, mz.MZTMBQ, mz.MZFZ, mz.MZBCF, mz.MZFZXL, mz.MZBQ, mz.MEBID, mz.STID, mz.NJNAME
          	) where 1=1
		]]>
		<isNotEmpty prepend="and" property="mebid">
			 <![CDATA[mebid = '$mebid$']]>
		</isNotEmpty>
		<isNotEmpty prepend="and" property="njname">
			 <![CDATA[njname = '$njname$']]>
		</isNotEmpty>
		<isNotEmpty prepend="and" property="stid">
			 <![CDATA[stid = '$stid$']]>
		</isNotEmpty>
		<isNotEmpty prepend="and" property="mznum">
			 <![CDATA[mznum = '$mznum$']]>
		</isNotEmpty>
	</select>

   这时候如果所有的条件都没有,那么where 1=1就没有任何意义。那么,这样写到底合不合适呢?

    答案是正确编码习惯下是合适的,主要包括以下几个方面:

    A:先看看不合适到底是什么原因?如下是一段截图:

              225635_fHEL_3658633.png

    B: 对A观点的对立:

        无论是否有 1=1 and ,查询分析器都会估计相同的行数,从而拥有同样的执行计划,因此不影响性能;另外,现在使用的大多数数据库如mySlq、SQLserver等 在查询分析器在代数树优化阶段就把1=1 直接给过滤掉了。这个功能就是查询优化器中所谓的“Constant Folding” 。

    C: 但是如果这样用不好,有可能会出现Sql注入。

    D:呀不想写了

 

 

 

 

 

 

 

转载于:https://my.oschina.net/FourierSeriesNzh/blog/1816353

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值