检索列具有相同值的不同行,并通过不使用游标超时进行迭代?

时间:2016-05-18 07:27:29

标签: java mysql

我看过thisthisthis,但没有一个答案可以解决我的问题。由于group by错误,即使sql_mode=only_full_group_by也无效。

我有一张行表:
       id,cId,aId,eId,val
       1 231 6 56 4
       2 231 6 56 7
       3 451 6 30 4
       4 762 7 56 4
       5 342 7 32 5
       6 453 7 34 6
       7 342 7 32 8

我想要仅基于cIdaIdeId的不同行。结果将是:
        231 6 56
       451 6 30
       762 7 56
        342 7 32
       453 7 34

两个挑战:
1.什么查询可以给我这个结果?
2.数据库包含大约1600万行。检索到唯一的行后,我将通过ResultSet的{​​{1}}进行迭代。我遇到了Java的问题,当迭代一个很长的结果集时,即使我正在迭代迭代,游标与数据库的连接也会超时。我被告知MongoDB如果它是一个非常大的结果集,也会发生同样的情况。

所以我的问题不仅仅是关于检索那些不同的行,还包括以这样的方式获取它,以便我能够一次迭代其中10000个块的块。我知道MySQL命令,但我不知道如何在运行限制为10000的选择后继续从第10001个结果中检索。

1 个答案:

答案 0 :(得分:1)

怎么样

select distinct cId,aId, eId from TheTable;

还可以看到sql分页(如果需要)。

您可以在包含Java重复命令的页面中获得结果,如下所示:

select distinct cId, aId, eId from TheTable limit 1, 10000;
select distinct cId, aId, eId from TheTable limit 10001, 10000;
select distinct cId, aId, eId from TheTable limit 20001, 10000;
select distinct cId, aId, eId from TheTable limit 30001, 10000;

依旧......
您需要一个变量来将1更改为10001然后更改为20001等。这些语句的含义是从TheTable中选择一些内容并将其限制为第一行结果的结果为10000'一排结果。第二个选择从不同结果的第10001行到10001 + 10000行进行选择。

但在开始分页之前,它有助于了解您要迭代的结果总数。你可以用:

来做到这一点
select count(distinct cId,aId, eId) from TheTable;