我看过this,this和this,但没有一个答案可以解决我的问题。由于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
我想要仅基于cId
,aId
和eId
的不同行。结果将是:
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个结果中检索。
答案 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;