1

categoriesテーブル、locationsトラフテーブルを使用した基本的な多対多のリレーションセットがありcategories_locationsます。例:

カテゴリー表

| 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 によるフィルタリングは簡単です。category_id IN (一致したカテゴリ) の通常の左結合です。しかし、カテゴリ 1 に属し、同時にカテゴリ 2 (など) に属するリレーションのみを取得したい場合、どのようにフィルタリングすればよいでしょうか?

4

1 に答える 1

4
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
于 2012-08-24T10:46:47.317 に答える