SELECT
*
FROM
content
WHERE
cityId='C-e834160464892529719476' and
regionId='a-10c7160465073001499199'
其中cityId和regionId是非必填的,前端可以传空也可以传值。如果改为regionId=''就查不出来了,因为数据库没有regionId为空的数据。这不是我想要的
我想要的是cityId和regionId传空就查所有数据,这该怎么优化呀?
SELECT
*
FROM
content
WHERE
cityId='C-e834160464892529719476' and
regionId='a-10c7160465073001499199'
其中cityId和regionId是非必填的,前端可以传空也可以传值。如果改为regionId=''就查不出来了,因为数据库没有regionId为空的数据。这不是我想要的
我想要的是cityId和regionId传空就查所有数据,这该怎么优化呀?
10 回答11.2k 阅读
15 回答8.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
8 回答6k 阅读
2 回答2.8k 阅读✓ 已解决
3 回答4.9k 阅读✓ 已解决
如果你在设计表结构的时候,没给有给 char 类型字段设置默认值(如 ''),那么在mysql 他存储的就是null
所以,如果你是要查指定cityId 并且 regionId 为空的sql 就这么写:
如果你要查的条件为 cityId,regionId 传空的时候,不做为限制条件就改为
如果你是问,这两个sql能不能合并成一个sql,答案是可以
已java的mybatis为例:
同理可知,在其他的语言当中你也需要动态的拼接sql,来达到查询不同条件的效果。
最后,在设计表结构的时候,尽量不要有 null 的存在,如果是字符串,就给个 '' 默认值,如果是数字,就给个 0 或者-1 之类的值,以此类推。