2012-08-24 88 views
0

我有基本的多對多關係集與表categorieslocationscategories_locations表。例如:從多對多的關係SQL過濾器

分類表

| ID | Name  | 
| 1 | Category 1 | 
| 2 | Category 2 | 
| 3 | Category 3 | 

位置表

| ID | Name  | 
| 1 | Location 1 | 
| 2 | Location 2 | 
| 3 | Location 3 | 

Categories_Locations表

| category_id | location_id | 
| 1   | 1   | 
| 2   | 2   | 
| 2   | 3   | 
| 3   | 1   | 
| 3   | 3   | 

如何獲得屬於第2類,並在同一時間也屬於所有位置到第3類?在上面的例子中,只會導致位置3!

用OR過濾很簡單。只是一個正常的左連接where category_id IN(匹配的類別)。但是,如果我只想獲取屬於category1的關係並同時也獲取category2(以此類推),如何進行過濾?

回答

3
select 
    Location_ID 
from CategoryLocations 
where Category_ID in (2,3) 
group by Location_ID 
having COUNT(distinct Category_ID) = 2 -- this 2 is the number of items in the IN list above 
+0

感謝,作品像魅力 –