2010-02-18 2 views

답변

11

두 개의 ResultSet이 같은 데이터베이스에있는 경우 union을 사용하여 검색 중에 결합하지 않는 이유는 무엇입니까? 예 : 이 후, 나는 당신의 ResultSet에서 추출한 행을 표현하기 위해 클래스를 정의하고 수 있도록 을 equals/hashCode를 구현하는 것이 좋습니다 옵션이없는 경우

select A, B 
from C 
union 
select A, B 
from D 

그러나 어떤지를 비교합니다. 그런 다음 중복을 제거하기 위해 각 을 Set (예 : HashSet)에 추가하기 만하면됩니다.

+1

+1 ... 대단한 대답 ... 매우 정확하고 요점 ... 나는 권리가 있다면 당신에게 10 번 upvote 것입니다. –

+2

UNION은 중복을 제거하여 강제로 정렬을 제거합니다. UNION ALL은 결과 집합을 기능적으로 연결합니다. dups가 수용 가능하거나 두 결과 세트가 겹치지 않는다면, UNION ALL을 사용하십시오. –

+0

@ Adam : OP는 이미 중복 행을 한 번만 표시하기를 원했기 때문에 UNION ALL이 아닌 UNION을 언급 한 이유는 분명합니다. – Adamski

3

당신이 할 수있는 다음과

  1. 는 "중복"당신이 정의하는 필드를 사용하여 equals()hashCode() 방법을 구현하는 컬럼에 해당하는 속성을 가진 클래스를 만듭니다 (수 있도록 여러분의 IDE의 도움을 이들의 생성)
  2. createa Set (HashSet)

    세트 combinedDataSet = 새로운 HashSet의();

  3. 반복 처리를 각 결과 집합 및 구성 제품 :

    while (rs1.next) { 
        YourClass obj = new YourClass(); 
        obj.setSomeProperty(rs.getString(1)); 
        obj.setAnotherProperty(rs.getString(2)); 
        // etc.. 
        cominbedDataSet.add(obj); 
    } 
    

    같은 반복이 rs2

간다 당신은을 통해 원하는 결과를 얻을 수없는 경우에만이 를 수행 SQL 쿼리!

+0

+1 ... .......... :) –

+0

@Bozho 나는 당신과 대화하고 싶습니다. 여기에 게시 할 수있는 프로그래밍 문제가 없습니다. 당신은 내 문제에 대한 여러 가지 질문에 답했고 따라서 저는 당신이 내 경력을 위해 당신에게 조언을 구하는 사람이라고 생각합니다. 나는 당신의 블로그도 확인했지만 당신과 대화 할 방법을 찾지 못했습니다. 나는 그것이 잘못된 것처럼 당신과 대화하기 위해 SO를 사용하고 싶지 않습니다. 나는 당신의 소중한 시간에서 저에게 약간의 시간을주고 당신과 어떻게 대화 할 수 있는지 말해 주시면 매우 감사하게 생각합니다. 감사합니다. . –

+1

@Yatendra Goel 특별한 질문이있는 경우 SO에 질문하십시오. 덜 구체적인 질문이있는 경우 내 블로그 (내 프로필에 링크되어 있음)를 확인하고 의견을 남기십시오. – Bozho

관련 문제