2011-02-11 5 views
0
에 대해 하나의 행에 제한

아래 표를 고려할 때,이에 따라서 각 profession.professionSQL - 일치하는 결과

에 대한 하나 개의 결과로 제한 a를 profession.profession_idcontractor_has_profession.profession_id에있을 때 profession.profession를 반환 쿼리하지만, 쓰기 얼마나 예를 결과 할 것이다 [코더, 데이터베이스, 프론트 엔드]

contractor_has_profession 
contractor_id | profession_id 
1    | 5 
2    | 5 
3    | 5 
4    | 2 
5    | 1 

profession 
profession_id | profession 
1    | Frontend 
2    | Database 
3    | Graphics 
4    | Sound 
5    | Coder 

답변

3
SELECT p.profession 
FROM profession p 
WHERE EXISTS(SELECT * 
       FROM contractor_has_profession c 
       WHERE c.profession_id = p.profession_id) 
1

흠이 충분해야

select distinct p.profession 
from profession p 
inner join contractor_has_profession c 
where p.profession_id = c.profession_id 

또는 내가 잘못 여기있어 경우, 다음 시도 : 다음`확실히 SQL Server의 문제를 (접근하는 가장 효율적인 방법은 개념적으로하지 않은 그들을 다시 제거

select p.profession 
from profession p 
inner join contractor_has_profession c 
where p.profession_id = c.profession_id 
group by p.profession 
+0

이 중복을 다시 가져올 것이다 EXISTS'가 더 효율적입니다. 아마도 MySQL에서는 아마도 하위 쿼리 성능이 매우 좋을 것 같습니다. –

+0

@Martin 나는 그것이 다르다고 생각하지만, 사실 당신의 솔루션은 더 빠릅니다. 가장 좋은 방법은 대상 설치에서 테스트하는 것입니다. 당신이 솔루션에서 말했듯이 우리는 하위 쿼리를 수행해야합니다. 조인은 훨씬 빠르게 afaik입니다. – rsc

+0

얘들 아, 두 솔루션 모두 완벽하게 작동합니다. 글쎄 내 경우 엔 속도가 문제라고 생각하지 않는다. 그러나이 솔루션을 사용하는 것이 더 쉽습니다. 활성 레코드로 변경하는 방법을 더 쉽게 이해할 수 있습니다. 모든 쿼리를 하나의 표준으로 유지하는 것이 더 쉽습니다. – davivid