如果你在设计表结构的时候,没给有给 char 类型字段设置默认值(如 ''),那么在mysql 他存储的就是null
所以,如果你是要查指定cityId 并且 regionId 为空的sql 就这么写:
SELECT
*
FROM
content
WHERE
cityId='C-e834160464892529719476' and
regionId is null
如果你要查的条件为 cityId,regionId 传空的时候,不做为限制条件就改为
SELECT
*
FROM
content
WHERE
cityId='C-e834160464892529719476'
如果你是问,这两个sql能不能合并成一个sql,答案是可以
已java的mybatis为例:
<select id="query" parmeter="parmType" result="Type">
SELECT
*
FROM
content
WHERE
1=1
<if test="cityId!=null and cityId!=''">
and cityId=#{cityId}
</if>
<if test="regionId!=null and regionId!=''">
and regionId=#{regionId}
</test>
</select>
同理可知,在其他的语言当中你也需要动态的拼接sql,来达到查询不同条件的效果。
最后,在设计表结构的时候,尽量不要有 null 的存在,如果是字符串,就给个 '' 默认值,如果是数字,就给个 0 或者-1 之类的值,以此类推。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…