2017-12-19 5 views
1

논리적으로는 SELECT DISTINCT <multiple columns>SELECT DISTINCT <less columns>보다 같거나 더 큰 출력을 가져야합니다.SQL - 더 많은 열에서 SELECT DISTINCT를 사용하면 결과가 줄어 듭니다.

내가 실제로 사용하고 데이터를 사용할 수 없지만 예를 들어 데이터 세트 인 경우 :

MAKE | MODEL | YEAR 
Toyota | Camry | 2017 
Toyota | Camry | 2015 
Toyota | Corolla | 2016 
Toyota | Corolla | 2016 
Honda | Civic | 2012 
Honda | Accord | 2012 

을 다음 DISTINCT MAKE를 선택 행 초래한다 :

MAKE 
Toyota 
Honda 

하는 DISTINCT SELECT 모델은 4 개 행을 초래할해야합니다

MAKE | MODEL 
Toyota | Camry 
Toyota | Corolla 
Honda | Civic 
Honda | Accord 

을 별개의 제조사, 모델을 선택 년 5 행 초래한다 :

MAKE | MODEL | YEAR 
Toyota | Camry | 2017 
Toyota | Camry | 2015 
Toyota | Corolla | 2016 
Honda | Civic | 2012 
Honda | Accord | 2012 

당신이 선택하고 더 많은 DISTINCT 열, 그것은 여분의 열이 고유 한 값을 가지고있어 가능성이 증가 (그러나 최소한 같은 유지)의 행의 양을위한 더 많은 기회 것 같아 결과.

더 많은 열에서 SELECT DISTINCT를 사용하면 더 적은 결과가 발생하는 경우가 있습니까? 그게 내 사건으로 일어난 일이지만, 그럴만한 이유가 있는지 확실하지 않습니다.

편집 : 나는 일반적인되기 위해 테이블 ​​/ 열 이름을 변경하고 단순에 대한 몇 가지 추가 조항을 삭제 한 것을 제외하고 여기에

, 내 SQL의 "복사"입니다.

WITH view1 
AS 
(SELECT DISTINCT t1.column1, t1.column2, t1.column3, t2.column4, t2.column5 
FROM TABLE_ONE t1 
INNER JOIN TABLE_TWO t2 
ON t1.column1 = t2.column1 
WHERE t1.column2 = "Name" 
AND t2.column3 = 2000 
), 

view2 
AS 
(SELECT DISTINCT v1.column1, v1.column2, v1.column3, v1.column4, v1.column5, t3.column6 
FROM view1 v1 
INNER JOIN TABLE_THREE t3 
ON v1.column2 = t3.column2 
WHERE t3.column6 = "something" 
), 

SELECT DISTINCT v2.column1, v2.column2, v2.column3, v2.column4, v2.column5, v2.column6, t4.column7 
FROM view2 v2 
INNER JOIN TABLE_FOUR t4 
ON v2.column4 = t4.column4; 

위의 항목 모두에서 "column5"와 같은 항목을 제거하면 실제로 더 많은 결과가 반환됩니다.

+1

'별개의'선택 목록에 열을 추가하면주의 한 것처럼 ** 적은 ** 행을 가져서는 안됩니다. 여기에 뭔가가 있습니다. 실제 쿼리/데이터를 공유 할 수 있습니까? – Mureinik

+0

select distinct가 혼란 스럽다면'group by '을 사용하도록 쿼리를 다시 작성하십시오. 그것은 기본적으로 똑같지 만 때로는 그것이 그것이하는 것처럼 행동하는 이유에 관해서는 덜 혼란 스럽습니다. –

+0

실제로 문제를 복제하지 않는 사례가 아닌 실제 사례를 보여 주면 어떨까요? – cHao

답변

3

절대. 데이터 세트의 다른 열의 고유 한 조합은 SAME 데이터 세트의 개별 필드의 고유 값보다 작을 수 없습니다. 수학적으로나 SQL에서는 불가능합니다. 이것은 당신이 합류하는 것과 다른 요인에 상관없이 적용됩니다.

+0

알았어. 나는 누군가가 내가 생각하지 못했던 부분에서 어떤 구멍을 뚫을 수 있는지를보기 위해 내 사고를 게시하고 싶었지만 그런 경우는 아니었고 내 문제는 다른 곳에서 거짓말을해야만하는 것처럼 보였다. – Louis

+0

당신이 얻는 결과의 "자동차"버전을 게시 할 수 있습니까? –

관련 문제