关于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

回到顶部