假设我有 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 不能同时是两个不同的值。
SELECT DISTINCT Items.Id
FROM Items INNER JOIN ItemsTags
ON Items.Id = ItemsTags.ItemId
WHERE ItemsTags.TagName = 'Tag1' AND ItemsTags.TagName = 'Tag3'
什么是正确的查询?在我的示例中,我只想取回第 1 项。