如果我查询这个:
SELECT disTINCT class_low FROM groups NATURAL JOIN species WHERE type ~~ 'faune' AND class_high ~~ 'arachnides' AND (class_middle ~~ 'araignées' OR class_middle IS NULL) AND (class_low ~~ '%' OR class_low IS NULL);
我明白了:
class_low --------------------- Dictynidés Linyphiidés Sparassidés Metidés Thomisidés Dolomedidés Pisauridés araignées sauteuses araneidés Lycosidés Atypidés Pholcidés Ségestriidés Tetragnathidés Miturgidés Agelenidés
注意NULL值(它不是空的varchar).
现在,如果我这样查询:
SELECT array_to_string(array_agg(disTINCT class_low),',') FROM groups NATURAL JOIN species WHERE type ~~ 'faune' AND class_high ~~ 'arachnides' AND (class_middle ~~ 'araignées' OR class_middle IS NULL) AND (class_low ~~ '%' OR class_low IS NULL);
我明白了:
array_to_string ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Agelenidés,araignées sauteuses,araneidés,Atypidés,Dictynidés,Dolomedidés,Linyphiidés,Lycosidés,Metidés,Miturgidés,Pholcidés,Pisauridés,Ségestriidés,Sparassidés,Tetragnathidés,Thomisidés
未插入NULL值.
有没有办法包括它?我的意思是:
解决方法
我没有8.4方便,但在更新的版本中,array_to_string忽略你的NULL所以问题不是array_agg,它是array_to_string.
例如:
=> select distinct state from orders; state --------- success failure
该空行实际上是NULL.然后我们可以看到array_agg和array_to_string用这个东西做什么:
=> select array_agg(distinct state) from orders; array_agg ------------------------ {failure,success,NULL} => select array_to_string(array_agg(distinct state),') from orders; array_to_string ----------------- failure,success
并且NULL在array_to_string调用中消失. documentation没有指定对NULL的任何特定处理,但忽略它们似乎与其他任何东西一样合理.
在版本9.x中,您可以像往常一样使用COALESCE:
=> select array_to_string(array_agg(distinct coalesce(state,'')),') from orders; array_to_string ------------------,failure,success
所以这可能适合你:
array_to_string(array_agg(disTINCT coalesce(class_low,')
当然,这会将NULL和空字符串折叠成一个值,这可能是也可能不是问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。