2011-11-22 2 views
2

I가 1738 개 행을 반환하는 다음 쿼리 :조인을 사용할 때 고유 한 행을 어떻게 반환합니까?

select a.street, b.id 
from TableA a 
left join TableB b on a.city = b.city 
order by a.street 

다음 쿼리 실행을 1,073 행을 반환
select distinct street from TableA

가 어떻게 내 첫 번째 쿼리에서 별개의 행을 반환 할 수 있습니다?
select distinct a.street, b.id을 사용해 보았지만 1090 개의 행을 반환합니다.

다른 가입이 필요합니까?

+0

외부 결합을 시도 했습니까? – markus

답변

5
select a.street, b.id 
from TableA a 
left join TableB b on a.city = b.city 
group by a.street, b.id 
order by a.street 
+0

감사합니다. 나는 그룹별로 잊어 버린다. 'group by a.street, b.id'는 1090 개의 행을 반환하지만'group by a.street' (b.id 제거)를 사용하면 1073 개의 행을 반환합니다. 그래서 그럴 필요가 있습니다. :) – Steven

+0

즉, 데이터 세트에서 여러 개의 ID가있는 동일한 거리가 있는지, 출력에서 ​​원하는지 또는하지 않을지 여부는 사용자가하려는 작업에 따라 달라집니다. –

+0

하나의 도시에 여러 개의 거리가있을 수 있으므로 여러 개의 ID는 괜찮습니다. :) – Steven

0

집계 기능과 함께 GROUP BY를 사용해야합니다. MySQL은 오류로 플래그하지 않지만 그렇게하는 동안 일부 데이터가 손실됩니다.

검색어에 대해 : "distinct a.street, b.id"를 수행하는 동안 1073 개의 별개의 거리가 있고 1090 개의 행을 얻는다면 일부 거리에 대해 하나 이상의 b.id가 있음을 의미합니다. 당신은 그들 모두를 얻을 수 있고 (그리고 1090 개의 행을 얻는다) 또는 그 중 일부를 취할 수있다. 각 길마다 1073 개의 행과 하나의 b.id를 얻으려면 다음을 사용하십시오.

관련 문제