场景说明
现在有一个简历查询场景,用户填写的简历信息中,除了个别内容是必填的,其余内容都是非必填,现在规定简历中除了必填项之外只要有一项没有填写的就提示待完善。现在需要查询用户的简历信息是否需要完善。
需求拆解
上面的问题实际上就是查询指定简历记录信息中除了必填字段之外的字段信息是否为空。
mysql中数据为空,一般是两种表现形式,字段不设置默认值,创建的时候会默认为null,另一种是字段值为空字符串。
以简历表resume中name字段说明null与空字符串查询的区别
准备的测试数据:
其中第一条name默认值为null,第二条name为一个空字符串,第三条name为两个空字符串。
查询name为null可以这样写:
SELECT * FROM RESUME WHERE NAME IS NULL
查询内容:
查询name为空字符串(不论几个空字符串):
SELECT * FROM RESUME WHERE NAME ='
查询结果:
判断简历记录中是否填写完整就是校验每个字段是否为null或是空字符串.所以实现方式如下(查询id为1的简历记录信息是否完整,gender和age有默认值故不做处理,仅校验name和content):
SELECT 1 FROM RESUME WHERE id=1 AND NAME IS NULL OR NAME ='' OR content IS NULL OR content ='' LIMIT 1
如果返回1说明该简历需要提示待完善。
考虑到每个字段需要校验null和空字符串,可以进行优化,缩减判断条件,name和content在表结构中设置默认值为空字符串,所以就不用判断是否为null。优化后sql:
SELECT 1 FROM RESUME WHERE id=1 AND NAME ='' OR content ='' LIMIT 1
以上是mysql中校验一条数据中所有字段是否完整的实现方案,如果感觉有帮助欢迎评论区留言和点赞!