2014-03-07 6 views
1

SQL 쿼리에서 반환 된 결과 인 2 개의 resultSet의 결과를 병합하고 싶습니다. 가장 좋은 방법은 무엇입니까?결과 집합 내의 루프가 중첩 된 while

내 계획은 두 결과 집합의 최종 결과를 출력하기 위해 2 개의 결과 집합을 반복합니다. 두 결과 세트의 첫 번째 열은 동일한 ID 열입니다. 그러나 내부 while 루프의 경우 첫 번째 값만 인쇄됩니다.

일치가있을 때 두 번째 결과 집합의 값을 인쇄하고 루프에서 벗어났다 고 생각했습니다. 그런 다음 일치하는 항목이 하나 더 있으면 값을 다시 인쇄합니다.

while (set1.next()) 
{ 
    System.out.print("Id: "+set1.getInt(1)+", Name: "+set1.getString(2)); 

    while (set2.next()) 
    { 
     if (set1.getInt(1)==(set2.getInt(1))) 
     { 
      System.out.print(", Alias: "+set2.getString(2); 
      break; 
     } 
    } 

    System.out.println(); 
} 

편집 :

ResultSet set1: 
id | name 
1 | A 
2 | B 
3 | C 
... 

ResultSet set2: 
id | alias 
1 | F 
2 | G 
2 | H 

나는 인쇄 할 :

Id: 1, Name: A, Alias: F 
Id: 2, Name: B, Alias: G, H 

참고로, ID는 아래의 루프 만 실행됩니다

+1

약간의 데이터 및 검색어 샘플을 게시 하시겠습니까? – Leo

+0

방금 ​​세트에 대한 추가 정보를 게시했습니다. 고맙습니다. – kaboom

+0

'set1'과'set2'는 무엇입니까? 어떤 데이터 유형입니까? – mrres1

답변

0

두 결과 세트의 첫 번째 열 (id)이 같으므로 두 결과 세트의 첫 번째 행부터 시작할 수 있습니다. 내부 루프에서 set1의 id보다 id가 클 때까지 set2의 행을 반복합니다. 그래야 할 일은 다음과 같습니다.

while (set1.next()) 
{ 
    System.out.print("Id: "+set1.getInt(1)+", Name: "+set1.getString(2)); 

    while (set2.next()) 
    { 
     System.out.print(", Alias:"); 
     if (set1.getInt(1)==(set2.getInt(1))) 
     { 
      System.out.print(set2.getString(2) + ", "); 
      continue; 
     } else { 
      set2.previous(); 
      break; 
     } 
    } 
    System.out.println(); 
} 
+0

그게 좋은 생각이야. 하지만 난 할 수 없어 becoz 이드는 set2 유일하지 않습니다. 그래서 하나의 '이름'은 여러 개의 '별칭'을 가질 수 있습니다. – kaboom

+0

확인, set2 id가 고유하지 않으면 내 업데이트 된 답변을 확인하십시오. – tonga

+0

감사합니다. 실제로 작업은 앞으로 만 결과 세트에서 지원되지 않는다고 말합니다. 2 개의 결과 세트의 결과를 병합하는 더 좋은 방법이 있습니까? 나는 ppl이 종종 SQL 쿼리에서 UNION을 사용한다고 생각한다. 하지만 반환 된 행에 다른 필드 ('Name'및 'Alias')가있는 UNION을 사용할 수 없습니다. – kaboom

1

두 세트에 상승 주문에 외부 루프를 위해 한번.

 while (set2.next()){ 
      if (set1.getInt(1)==(set2.getInt(1))){ 
       System.out.print(", Alias: "+set2.getString(2); 
       break; 
      } 
     } 

외부 루프가 실행될 때마다 반복기를 다시 초기화해야합니다.

+0

입니다. 죄송 합니다만 반복기를 다시 초기화 할 수 있습니까? 나는 Java에 매우 익숙하다 – kaboom

+0

코드에서 set2를 초기화해야한다? Iterator set2 = yourSet.iterator()와 같은 것입니다. 내부 while 루프 전에이 작업을 수행해야합니다. –

+0

Iterator를 추가했습니다. set2_itr = set2.iterator(). 그것은 iterator() 메소드가 없다고 말했다. 내가 가져온 않았다 java.util. * – kaboom

관련 문제