00:00/00:00

首先事情的开始是一个group by 导致的 ,当你用到group by 统计数据的时候,如果有统计总数,count(*) 像下面这样

select count(*),sum(a),sum(b),d from c group by d

如果仅仅这样取值倒是无所谓,但是当结果集是一个对象的list时 ,然后问题就出现了,如果表里的数据是空的
,也会有一条数据,就是list的size == 1:anguished:;

另外一种情况就是 union 这个链接表的时候,如果有一方统计为空 那么也会出现!

首先我想到的是可以通过判断结果集count(*)==0 过滤掉
然后把这个remove掉

然后出现了怎么原list的size 一直不变,原来我写错了,要移除索引,或者对象,但是我是for循环取得,像这样

for(S s: list){
    if(s.getCount==0){
        list.remove(s);
}

}

我想因该可以了,这个时候就出现了第一个错误,list remove掉之后 size 变为了0 ,但是依旧跑下一个循环,抛了异常,
解决办法:新建一个临时list,最后在统一remove掉

List<S> tempList = new ArrayList<>();
for(S s:list){
    if(s.getCount==0){
        tempList.add(s);
    }
}
for(S s:tempList){
    list.remove(s);//注意这里remove索引会出错哦
}

然后调试过之后 sql 又不行了,where a.id not in (select b.id from b)总是没有值,一直是空!
最后发现原来是因为子句查出的值有null ,解决办法

IFNULL(b.id,'')

至此完美解决 。吃一堑长一智。。。

You Might Also Like

No Comments

Leave a Reply