我需要根据某些唯一标识符从结果集中删除重复值。
我需要从结果集中删除重复项。
while(resultSet.next())
{
int seqNo = resultSet.getInt("SEQUENCE_NO");
String tableName = resultSet.getString("TABLE_NAME");
String columnName = resultSet.getString("COLUMN_NAME");
String filter = resultSet.getString("FILTER");
}
从上面的迭代中,我从结果集中得到2行。有相同的seq no,相同的表名,不同的列名,相同的过滤器。
1 PRODUCTFEES CHARGETYPE PRODUCTID
1 PRODUCTFEES PRODUCTCODE PRODUCTID
我的要求是删除重复的表名,重复seq no,重复过滤器。
我希望得到以下输出,
1 PRODUCTFEES CHARGETYPE PRODUCTCODE PRODUCTID
答案 0 :(得分:0)
根据您提供的示例,您似乎想要为每个列单独输出所有不同的值(表中有4列,但您输出5个值)。
作为标记为java
的问题,您可以采用的方法是为每个列使用Set
的实现,以便重复项无法通过。然后输出每个Set
的所有元素。
LinkedHashSet[] sets = new LinkedHashSet[]{
new LinkedHashSet(),
new LinkedHashSet(),
new LinkedHashSet(),
new LinkedHashSet() };
while(resultSet.next()) {
sets[0].add(resultSet.getInt("SEQUENCE_NO"));
sets[1].add(resultSet.getString("TABLE_NAME")););
sets[2].add(resultSet.getString("COLUMN_NAME"));
sets[3].add(resultSet.getString("FILTER"));
}
StringBuilder buf = new StringBuilder();
for (LinkedHashSet set : sets) {
// append to buf all elements of each set
}
但是从同一个SQL查询中解决这个问题可能更简单,只需为每个列创建SELECT DISTINCT columnX
并输出结果而无需进一步操作。或者使用聚合函数来连接所有不同的值。实现将高度依赖于您正在使用的DBMS(对于MySQL GROUP_CONCAT
,对于Oracle,LISTAGG
,...)。对于Oracle来说,这也是一个类似的问题:How to use Oracle's LISTAGG function with a unique filter?
答案 1 :(得分:0)
根据我所说的不同输出,您不仅需要删除重复项,还需要重复排序重复数据。
在这种情况下,您需要在while(resultSet.next())
中填充新的数据数组(或类似结构),然后在新循环的数据对象上循环并相应地输出。
在Meta-Lang中,这将如下:
while resultset.next()
if newdata-array has unique key
add column-name to found entry in newdata-array
else
create new entry in newdata-array with column-name
while newdata-array.next()
output seq, table-name
while entry.column-names.next()
output column-name
output product-id