복붙노트

[SQL] 크로스 중복 조합없이 가입

SQL

크로스 중복 조합없이 가입

이 질문은 이것과 매우 유사합니다 알고 : 대칭 크로스 가입 이 일이 너무 : 크로스 조합 (하지 순열)는 SQL에 참여

우리는 두 개의 서로 다른 테이블이 경우에, A와 B를 무슨 말에 대해 :

select A.id,B.id from A cross join B

나는 (B A)를 동일 쌍 (A, B)을 고려하는 것이 좋습니다?

해결법

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

    1.

    select A.id aid,B.id bid
    from A inner join B on a.id <= b.id
    union
    select B.id,A.id
    from A inner join B on b.id < a.id
    

    좀 더 정교하고 싶었 경우 :

    select distinct
           case when a.id<=b.id then a.id else b.id end id1,
           case when a.id<=b.id then b.id else a.id end id2
    from A cross join B
    

    작은 테이블 내 작은 비 과학적 베이크 오프에서, 후자는 더 빨랐다. 그리고 아래의 경우 표현식은 서브 쿼리로 작성.

    select distinct
           (select MIN(id) from (select a.id union select b.id)[ ]) id1,
           (select MAX(id) from (select a.id union select b.id)[ ]) id2
    from A cross join B
    
  2. from https://stackoverflow.com/questions/12932045/cross-join-without-duplicate-combinations by cc-by-sa and MIT license