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