我通过Java的JDBC连接器从表中选择不同的值,似乎NULL值(如果有的话)始终是ResultSet中的第一行。
我需要从我加载此ResultSet的List中删除此NULL。逻辑只查看第一个元素,如果它为null则忽略它。
我在查询中没有使用任何ORDER BY,我还能相信那个逻辑吗?我在Postgres的文档中找不到任何关于此的参考。
答案 0 :(得分:2)
您可以添加NOT NULL检查。就像
一样select distinct columnName
from Tablename
where columnName IS NOT NULL
此外,如果您没有提供ORDER BY子句,那么无法保证您将获得结果的顺序,因此您不能依赖它。因此,如果您希望在特定输出中输出结果(,即升序或降序),那么最好提供ORDER BY子句
如果您正在寻找reference Postgresql document,那么它会说:
如果未给出ORDER BY,则按行的顺序返回行 系统发现生产速度最快。
答案 1 :(得分:1)
如果手册中没有说明,我不会信任它。但是,只是为了好玩并尝试弄清楚正在使用什么逻辑,运行以下查询确实将NULL(没有明显的原因)带到顶部,而所有其他值都是明显的随机顺序:
with t(n) as (values (1),(2),(1),(3),(null),(8),(0))
select distinct * from t
但是,将表与其自身的修改版本交叉连接会将两个NULL带到顶部,但随机NULL会分散到结果集中。所以它似乎没有一个明确的逻辑聚集在顶部的所有NULL值。
with t(n) as (values (1),(2),(1),(3),(null),(8),(0))
select distinct * from t
cross join (select n+3 from t) t2