次のように定義された 2 つのテーブルがあるとします。
Items
-----
Id (Primary Key)
ItemName
ItemsTags
-----
ItemId (Primary Key)
TagName (Primary Key)
次のデータを入力します。
Items
-----
1, Item1
2, Item2
3, Item3
ItemsTags
--------
1, Tag1
1, Tag2
1, Tag3
2, Tag3
3, Tag4
3, Tag5
Tag1 または Tag3 のいずれかが割り当てられたアイテムを検索すると仮定すると、次のクエリが機能します。
SELECT DISTINCT Items.Id
FROM Items INNER JOIN ItemsTags
ON Items.Id = ItemsTags.ItemId
WHERE ItemsTags.TagName = 'Tag1' OR ItemsTags.TagName = 'Tag3'
1 と 3 が返されます。
ただし、そのクエリを変更して、Tag1 と Tag3 の両方を持つアイテムを取得するにはどうすればよいですか? 次のクエリは明らかに機能しません。これは、任意の行で TagName を一度に 2 つの異なる値にすることはできないためです。
SELECT DISTINCT Items.Id
FROM Items INNER JOIN ItemsTags
ON Items.Id = ItemsTags.ItemId
WHERE ItemsTags.TagName = 'Tag1' AND ItemsTags.TagName = 'Tag3'
正しいクエリは何ですか? 私の例では、アイテム 1 のみを取得したいと考えています。