关于mysql的sql语句中,1=1的用法?
在mybatis/原生的mysql语句中,有时会看到类似:select……from table where 1=1 and 条件A。据了解是为了避免:条件A判断出错 或者 往条件A传值时,传了空值,导致sql报错。
请问是这样吗?还是有别的原因?请指教,谢谢
回答:
复杂的条件查询,需要考虑各种情况下,where 部分的语句是否语法正确。
为了解决这个问题,现在大部分的动态sql都建议加上 where 1=1.
你可能会想到sql的性能,我以前测试过 where 1=1,因为它总是TRUE,执行计划就会忽略这个条件,
SQL Server ,Oracle、MySQL 和 PostgreSQL 结果都一样。
据了解是为了避免:条件A判断出错 或者 往条件A传值时,传了空值,导致sql报错。
你说的传空值,这个需要考虑在SQL在执行前,需要进行各种适当性检查,正常情况下不应该传空值的,
可以考虑这样,只有A满足某种条件然后再加入到where中
where 1=1. if A 是 true
and xxxx A
end if
回答:
还有个原因,在写 ORM 工具时,前面有 where 1=1
后面就可以无脑的 push (and 条件)进去,比如:select().where(xxx).where(xxx)
否则要多写一层判断,判断原来有没有 where 子句
回答:
有可能整条语句就是动态语句吧,‘AND 条件A’应该是一个整体A拼接到语句中的,如果A需要判断,那么A条件不一定存在,where后面可能为空了,所以加上‘1=1’
回答:
防止Where后没有条件报错
回答:
条件查询很多时候是
<if test="参数A!-null"> and 列名A = #{参数A}
</if>
<if test="参数B!-null">
and 列名B = #{参数B}
</if>
...
如果条件全部不符合 sql就会变成
select * from table where
这样sql会因为语法错误报错,所以会有在条件前加上1=1的写法
<where></where>标签现在好像可以取代这种写法
可以参考 https://www.cnblogs.com/caoyc/p/5574966.html
回答:
这样不用判断where后的第一个条件用不用加and
回答:
之前刚学后端也是有这个问题,后来才知道是为了避免一些查询条件错误
以上是 关于mysql的sql语句中,1=1的用法? 的全部内容, 来源链接: utcz.com/p/944202.html