我有以下三个用于标记内容的表,其中每个内容可以具有一对多标记。例如,内容记录可以具有“加利福尼亚”和“变量”的标签。
带内容表
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语句以检索具有一对多标签的内容?
我喜欢使用聚合和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
标签表。您正在使用ID,并且位于中ContentTag
。*
。我假设您正在查找具有两个标签的内容。WHERE
子句将标签限制为有问题的两个标签。HAVING
子句确保两者都存在。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句