PostgreSQL查询默认值为NULL的字段返回0行如何解决
问题原因
- SQL标准中
NULL代表未知值,无法使用普通比较运算符(=、!=、<等)和其他值做比较,v1=NULL的判断结果永远为未知,不会命中任何行。 LENGTH()函数传入NULL时,返回结果也是NULL而非0,因此LENGTH(v1)=0的条件也无法匹配v1为NULL的行。
正确查询方案
方案1:仅匹配v1严格为NULL的行(推荐)
使用IS NULL运算符做判断,语句如下:
SELECT id FROM t1 WHERE v1 IS NULL;
执行后即可返回符合要求的id:1、2、3。
方案2:同时匹配NULL和空字符串
如果场景中需要同时命中v1为NULL和v1是空字符串''的情况,可以用COALESCE函数做值转换:
SELECT id FROM t1 WHERE COALESCE(v1, '') = '';
该语句会先把v1的NULL值转换为空字符串,再和空字符串做比较,两种场景都能覆盖。
内容的提问来源于stack exchange,提问作者Kukula Mula
相关产品推荐
相关产品推荐

