我有以下三个用于标记内容的表,其中每个内容都可以包含一对多标记。例如,内容记录可以包含California和Variable的标记。
表格内容
Content
-ContentID
-ContentName
带有标签的表
Tag
-TagID
-TagName
链接内容和标签的表
ContentTag
-ContentID
-TagID
使用以下SELECT语句,我想获得TagID为21和54的记录,但不返回任何行。
SELECT * FROM ContentTag
INNER JOIN Content On ContentTag.ContentID=Content.ContentID
INNER JOIN Tag ON ContentTag.TagID=Tag.TagID
Where (Tag.TagID=21 And Tag.TagID=54)
如何创建SQL SELECT语句以检索具有一对多标记的内容?
答案 0 :(得分:3)
我喜欢使用聚合和having
子句来解决这个问题:
SELECT c.ContentId, c.ContentName
FROM ContentTag ct INNER JOIN
Content c
On ct.ContentID = c.ContentID
WHERE ct.TagID IN (21, 54)
GROUP BY c.ContentId, c.ContentName
HAVING COUNT(Distinct ct.TagId) = 2;
一些注意事项:
join
到标签表。您使用的是ContentTag
。*
。我认为你正在寻找具有两个标签的内容。WHERE
子句将标记限制为相关的两个标记。HAVING
子句确保两者都存在。