2010-05-26 7 views
4

이의 말을하자 선택한 열을 무시 :MySQL의 : DISTINCT 사용하는 경우

  1. 내 테이블에 콜라, COLB 및 COLC를 조회 할.

  2. 나는 DISTINCT 값을보고 싶지만 colA를 구별 기준으로 삼기를 원하지 않습니다.

  3. 생략 colA는 옵션이 아닙니다.

해당 쿼리를 구성하는 가장 좋은 방법은 무엇입니까?

+0

http://stackoverflow.com/questions/1918556/sql-select-distinct-values-from-1-column 가능한 복제본. – Nitrodist

답변

0

나는 임시 테이블의 구문을 잘 모릅니다, 그래서 당신은 =)

Select Distinct ColB, ColC into @Temp 
From SomeTable 
Where (predicates) 

Select ColA, ColB, ColC 
From SomeTable 
Inner Join @Temp on (SomeTable.ColB = @Temp.ColB and SomeTable.ColC = @Temp.ColC) 
Where (predicates) /* Added for comments */ 

희망이 도움이 바랍니다 의사합니다.

+0

그냥 SomeTable의 사본을 생산하지 않을까요? 내부 조인은 @Temp의 정확히 한 행과 일치합니다. –

+0

내부 조인은 열 값을 포함하고 다른 값을 포함하지 않는 모든 행과 일치합니다. – Immersive

+0

예, SomeTable의 모든 행 (조건 자와 일치)은 @Temp 테이블에 (ColB, ColC) 쌍을 갖습니다. –

6

두 가지 경우가 있습니다. 의 당신은 데이터

A B C (columns) 
a b c1 
a b c2 

(A)의 고유 값을 복용 있다고 가정 해 봅시다, B는 하나의 결과를 제공 (A, B), C. 그래서 질문은 당신의 모든 값을보고 싶어 할 것입니다 열 두 값 C 또는 열 A와 B의 고유 한 값 각각에 대해 하나의 값을 가질 수 있습니까?

당신이 C의 한 값을보고 싶은 경우 다음

SELECT DISTINCT A, B, C FROM YourTable WHERE ROW(A,B) IN 
    (SELECT A, B FROM YourTable 
    GROUP BY A, B) 

당신을 제공합니다 C에 대한 모든 값을보고 싶다면, 당신은, 다른 한편으로

SELECT A, B, MAX(C) FROM YourTable 
    GROUP BY A, B 

을 쓸 수 있습니다 그. 이 마지막 대안은 테이블에 다른 열이있는 경우 필요합니다.

+0

첫 번째 옵션은 좋아 보이지만 SELECT DISTINCT A, B, C에 해당하는 두 번째 옵션은 아닙니다. –

+0

@Keith - 다른 열이 없으면 동일하지만 대답은 "테이블에 다른 열이 있으면이 마지막 대안이 필요합니다." – mdma

+0

여분의 열이있는 경우 SELECT DISTINCT A, B, C가 작동하지 않는 것을 이해하지 못합니다. –