복붙노트

[SQL] 이 열에 고유 한 값을 선택 MYSQL

SQL

이 열에 고유 한 값을 선택 MYSQL

나는 데이터베이스에 고유 한 값을 선택합니다. 나에게 간단한 예를 통해 당신을 실행하자.

표:

foo bar
--- ---
a   c
c   f
d   a
c   a
f   c
a   c
d   a
a   c
c   a
f   c

오른쪽의 내 SQL은 SELECT DISTINCT foo는, 테이블 바있다 가정 해 봅시다. 다음은 내 결과입니다 :

foo bar
--- ---
a   c
c   f
d   a
c   a
f   c

그러나 문제는 그들이 다른 순서에있는 단지 C는 C의 반복이 /가 있다는 것입니다. 나는 두 열에서 고유 한 값을 원하는,이 설정을 선택하지 않으려는, 제발 도와주세요!

해결법

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

    1.아주 아주 악인 및 악 :

    아주 아주 악인 및 악 :

    select distinct
        least(foo, bar) as value1
      , greatest(foo, bar) as value2
    from table
    
  2. ==============================

    2.방법에 의해 GROUP 사용에 대한?

    방법에 의해 GROUP 사용에 대한?

    SELECT foo는, foo는 BY MY_TABLE 그룹에서 바, 바

  3. ==============================

    3.방법에 대해 :

    방법에 대해 :

    SELECT DISTINCT a.foo,a.bar 
    FROM table a
    LEFT JOIN table b ON a.foo=b.bar and a.bar=b.foo
    WHERE b.foo IS NULL AND b.bar IS NULL
    

    출력 :

    foo bar
    --- ---
    d   a
    
  4. ==============================

    4.(그것은 폐쇄하지이기 때문에, 비대칭 뭔가가 특별한 이름이 있으면 나도 몰라) 당신은 대칭 폐쇄 반대 뭔가를 요구하고 있습니다. 폐쇄 및 두 개의 서로 다른 열을 비교해야 할 것 같은 폐쇄를 들어, 조인을 사용할 수 있습니다. 그들은 열을 통해 중복 될 때 당신이 두 행을 필터링하지 않는하려면, 당신은 반복을 구별하는 방법이 필요하고 상기 제 1의 적은이다 쌍을 포함하여 같은 중 하나를 포함한다.

    (그것은 폐쇄하지이기 때문에, 비대칭 뭔가가 특별한 이름이 있으면 나도 몰라) 당신은 대칭 폐쇄 반대 뭔가를 요구하고 있습니다. 폐쇄 및 두 개의 서로 다른 열을 비교해야 할 것 같은 폐쇄를 들어, 조인을 사용할 수 있습니다. 그들은 열을 통해 중복 될 때 당신이 두 행을 필터링하지 않는하려면, 당신은 반복을 구별하는 방법이 필요하고 상기 제 1의 적은이다 쌍을 포함하여 같은 중 하나를 포함한다.

    SELECT DISTINCT t1.foo, t1.bar
      FROM `table` t1
        LEFT JOIN `table` t2
          ON t1.foo=t2.bar AND t1.bar=t2.foo 
      WHERE t2.foo IS NULL OR t1.foo <= t1.bar;
    
  5. ==============================

    5.

       SELECT 
           foo, bar
       FROM tableX
       WHERE foo <= bar
     UNION 
       SELECT 
           bar, foo
       FROM tableX
       WHERE bar < foo
    
  6. ==============================

    6.

    SELECT DISTINCT foo, bar FROM table WHERE
    CONCAT(',',foo,bar,) NOT IN ( SELECT CONCAT(',',bar,foo) FROM table )
    
  7. ==============================

    7.이것은 나를 위해 작동합니다 :

    이것은 나를 위해 작동합니다 :

    SELECT DISTINCT
    LEAST(sub.foo, sub.bar) as value_1
    , GREATEST(sub.foo, sub.bar) as value_2
    
    FROM
    (SELECT
    a.foo
    ,a.bar
    FROM
    table a
    JOIN
    table b
    on a.foo = b.bar
    and a.bar = b.foo) sub
    
  8. ==============================

    8.그래서 내가 이해 당신은 무엇을 하나의 SQL 검색 결과 행에 두 필드를 결합하려는 ... 내가 여기에 매우 혼란 대부분의 해답을 발견했다.

    그래서 내가 이해 당신은 무엇을 하나의 SQL 검색 결과 행에 두 필드를 결합하려는 ... 내가 여기에 매우 혼란 대부분의 해답을 발견했다.

    이것은 내가 (여러 행과 여러 테이블로 확장 할 수 있습니다)해야 할 때 난 항상 그것을 할 방법입니다 :

    FROM SELECT a.field ( 테이블에서 필드 1 AS SELECT foo는 노동 조합 TABLEX FROM 필드 1 AS SELECT 바 ) ㅏ

    또는

    FROM SELECT DISTINCT a.field1 ( TABLEX FROM 필드 1 AS SELECT foo는, 조건 UNION ALL AS SELECT 필드 1 바 TABLEX FROM 조건 ) a.conditions = 1 (일부 결과를 필터링하는 별도의 조건을 추가 WHERE a)

  9. from https://stackoverflow.com/questions/6744759/mysql-select-distinct-values-in-two-columns by cc-by-sa and MIT license