2012-10-05 4 views
1

다음은 간단한 테이블 버전입니다.SQL Help Needed

FRID, RELFRID, Relationship 
    123, 456, Husband/Wife 
    456, 123, Wife/Husband 
    345, 765, Brother/Sister 
    765, 345, Sister/Brother 

관계의 표현을 하나만 가져오고 싶습니다 (각 레코드 2 세트 중 하나만 선택). 나는 EXCEPT와 SUBSELECTS를 포함한 많은 것을 시도해 왔고, 왼쪽의 모든 숫자도 오른쪽에 표시되기 때문에 아무 것도 시도하지 않은 결과가 있습니다. 어떤 결과를 얻는 지 어떻게 생각하세요? 아래의 모든 쿼리 조합을 시도했습니다.

select frid, relfrid from frrelmst 
    except 
    select frid, relfrid from frrelmst 
    where frid in (select relfrid from frrelmst) 
    order by frid, relfrid 

    Select frid, relfrid from frrelmst where 
    relfrid+frid not in (select frid+relfrid from frrelmst) 

답변

7

쉬운 :

select frid, relfrid from frrelmst where frid < relfrid 
+1

나는 이것을 좋아한다. . .영리한. –

+0

Brilliant !! 감사! – user1475911

+0

그래도 '123, 456, 남편/아내'라는 레코드가 존재하지 않으면 어떻게 될까요? 아니면 언제나 관계에 대한 두 가지 표현이있을 것입니까? – acatt

0

나는 아래 SQL을 사용하십시오. 테이블에 하나의 관계 표현 만 존재하면 여전히 리턴됩니다.

SELECT frid, relfrid, relationship 
FROM frrelmst f 
WHERE frid < relfrid 
    OR NOT EXISTS (
    SELECT 1 
    FROM frrelmst 
    WHERE frid = f.relfrid 
     AND relfrid = f.frid 
     AND frid <= f.frid 
)