2011-02-11 77 views
0

考慮下面的表格,我將如何編寫一個查詢,返回profession.professionprofession.profession_id存在於contractor_has_profession.profession_id,但其限制在一個結果每個profession.professionSQL - 限制一行匹配結果

所以在這種示例結果將是[編碼器,數據庫,前端]

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 

,或者如果我錯了這裏,然後嘗試:

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

這將帶回重複然後再刪除它們這是不是概念上接近問題(肯定在SQL Server'的最有效的方法EXISTS`更高效 - 也許在MySQL中,它可怕的子查詢性能可能會更好,但這可能會更好!) – 2011-02-11 13:38:26