복붙노트

[SQL] SQL 쿼리에서 역 중복 제거

SQL

SQL 쿼리에서 역 중복 제거

하자 쿼리 결과가 문자열 쌍 (x, y)의 목록을 반환하도록되어 있다고 말한다. 나는 반대 중복을 제거하려합니다. (X, Y)이 나중에 표시되지 않아야 결과 중 하나, (Y, X) 인 경우 내 말은있다.

예:

column 1 (foreign key)    column 2 (int)     column 3 (string)
4                         50                 Bob
2                         70                 Steve 
3                         50                 Joe

이 표에 표시된 사람들은 다른 열이 값으로 여러 번 나타날 수 있습니다.

내 쿼리는 동일한 열이 값이 이름의 모든 쌍을 인쇄 할 필요가있다 :

select e.column3, f.column3 from example as e, example as f where e.column2 = f.column2 

(Bob, Bob)
(Bob, Joe)
(Joe, Bob)
(Joe, Joe)

이 복식을 제거하도록 I 쿼리를 업그레이드 :

select e.column3, f.column3 from example as e, example as f where e.column2 = f.column2
       and e.column3 <> f.column3

(Bob, Joe)
(Joe, Bob)

지금은 단지 수익을 원하는 :

(Bob, Joe). 

나는 결과에 그것을 원하지 않아요 그래서 (조, 밥), 역 중복입니다. 한 쿼리에서 그것을 처리하기 위해 어쨌든 있나요?

해결법

  1. ==============================

    1.우선, 2012 년에 우리는 쉼표를 사용하여 관련 테이블에서 떨어져 마이그레이션 한 환영합니다. 그것은 ANSI 89 introdued했지만 심각하게 부족하다. Nowaways, 올바른 방법은 ANSI 92/99/2003 JOIN 구문을 사용하여 쓰기 쿼리입니다.

    우선, 2012 년에 우리는 쉼표를 사용하여 관련 테이블에서 떨어져 마이그레이션 한 환영합니다. 그것은 ANSI 89 introdued했지만 심각하게 부족하다. Nowaways, 올바른 방법은 ANSI 92/99/2003 JOIN 구문을 사용하여 쓰기 쿼리입니다.

    문제에 대한 해결책은 당신이 선호하는 중 중, 단방향 불평등으로 양방향 불평등을 <> 설정하는 것입니다 <또는>.

    select e.column3, f.column3
    from example as e
    join example as f on e.column2 = f.column2 and e.column3 < f.column3
    
  2. ==============================

    2.

    select e.column3, f.column3 from example as e, example as f where e.column2 = f.column2
           and e.column3 <> f.column3 where e.id < f.id
    

    절은 그것을해야 간단한 추가.

  3. from https://stackoverflow.com/questions/13041802/remove-reverse-duplicates-from-an-sql-query by cc-by-sa and MIT license