2010-03-22 5 views
0

난 별명이 아닌 필드에 inner join을 수행하는 쿼리가 나타났습니다. 나는 전에 이것을 본 적이 없으며이 사용법에 대해 약간 혼란 스럽습니다. 뭔가 같은 :비 구분 필드에서 내부 조인을 수행하는 이유는 무엇입니까?

SELECT distinct all, my, stuff 
FROM myTable 
INNER JOIN myOtherTable 
    ON myTable.nonDistinctField = myOtherTable.nonDistinctField 
(WHERE some filters here...) 

내 질문이 무엇인지 확실히 모르겠어요 방법이나 문구를, 또는 왜 정확히 나를 혼란에,하지만 누군가가 내부 조인 할 필요가 왜 사람이 설명 할 수 있는지 궁금 해서요 비 고유 필드에서 선택한 다음 고유 값만을 선택하십시오 ...? 비 구분 필드에서 내부 조인을 적법하게 사용합니까? 목적은 무엇입니까? 그리고 이러한 쿼리에 대한 합법적 인 이유가있는 경우 사용할 위치의 예를 제공 할 수 있습니까?

답변

2

나는 당신이 요구하는 것을하는 것이 타당한 어떤 유효한 이유도 생각해 낼 수 없다. 적어도 시스템에 극도의 제약이없는 것은 아닙니다.

0

필자는 테이블 간의 관계 (고유 열 포함)를 기반으로 테이블을 조인해야한다고 생각합니다. 아마도 하나의 쿼리를 작성할 때 데이터베이스 디자인을 다시 살펴 봐야 할 것입니다.

+0

기본 키는 고유 한 (또는 그의 명명법에서 고유 한) 필드의 유일한 종류는 아닙니다. –

+0

좋아, 나는 단지 질문을하고 있었다. 나는 그 의미 만은 아니었다. 그 이상으로 나는 그 대답에 의미가 없었습니다. 나는 대답에 답하기보다는 질문에 주석으로 써야했다. 하지만 어쨌든 당신은 downvoting을 위해 서둘러 왔을 것입니다. :-) 감사. –

2

나는 이유를 생각할 수 있습니다 - 비 구분 필드는 외래 키입니다.

필드는 외부 테이블에서는 고유하지만 첫 번째 테이블에서는 구분되지 않습니다.

예를 들어, 오래된 맹목적으로 중복되는 메일 링리스트를 정리하고 이미 국가 이름을 저장하지 않고 국가 ID를 저장하도록 국가 필드를 수정했다고 가정 해 봅시다. 국가 데이터를 가져 오기 위해 countryid와 국가에 가입하면 이제 country 테이블에 추가 데이터를 저장할 수 있습니다.

이제는 국가의 정규화 이점을 얻지 만 여전히 주소 테이블과 구별되는 값을 얻습니다.

약간 부작용이 있지만 작동 할 것입니다.

1

이 그럴듯한 한 시나리오는 특정 기간 동안 쿼리 된 날짜 기반보고 시스템입니다. 예를 들어, 첫 3 개월을 말하십시오. 그런 다음 nonDistinctField가 year.month (yyyy.mm) 인 곳에서 언급 한 것처럼 다른 테이블의 관련 데이터를 조인 할 수 있습니다. 그래도 조인 해상도가 좋지 않을 수도 있지만 그룹화 된 월에 조인 된 다른 집계 함수 (SUM, AVG 등)를 사용할 수 있습니다.

집계 쿼리가 이러한 조인 유형의 이점을 누릴 수있는 예제가 많이 있어야한다고 생각합니다.

좋은 생각은 아니지만 아마 비정규 화 된 데이터 나 아주 나쁜 데이터 모델을 사용하는 것으로 제한 될 수 있습니다.

관련 문제