SQL筛选多对多关系
我有一个基本的多对多关系集,表类别,位置通过类别和位置表。例如: 类别表SQL筛选多对多关系,sql,many-to-many,relational-database,Sql,Many To Many,Relational Database,我有一个基本的多对多关系集,表类别,位置通过类别和位置表。例如: 类别表 | ID | Name | | 1 | Category 1 | | 2 | Category 2 | | 3 | Category 3 | 位置表 | ID | Name | | 1 | Location 1 | | 2 | Location 2 | | 3 | Location 3 | | category_id | location_id | | 1 | 1
| ID | Name |
| 1 | Category 1 |
| 2 | Category 2 |
| 3 | Category 3 |
位置表
| ID | Name |
| 1 | Location 1 |
| 2 | Location 2 |
| 3 | Location 3 |
| category_id | location_id |
| 1 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 3 |
类别和位置表
| ID | Name |
| 1 | Location 1 |
| 2 | Location 2 |
| 3 | Location 3 |
| category_id | location_id |
| 1 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 3 |
如何获取属于类别2且同时也属于类别3的所有位置?在上面的例子中,这只会导致位置3
使用或进行过滤很简单。只是一个正常的左连接,其中category_id位于匹配的categories中。但是,当我只想得到属于category1的关系,同时也要得到category2的关系时,如何进行过滤呢
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