如何选择相关表中具有多个值的记录?

时间:2014-11-30 02:22:54

标签: sql sql-server

我有以下三个用于标记内容的表,其中每个内容都可以包含一对多标记。例如,内容记录可以包含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语句以检索具有一对多标记的内容?

1 个答案:

答案 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
  • 中的ID
  • 您不需要*。我认为你正在寻找具有两个标签的内容。
  • WHERE子句将标记限制为相关的两个标记。
  • HAVING子句确保两者都存在。