是否可以使用一个查询查询一对多

时间:2012-04-02 16:52:30

标签: sql sql-server-2008

让我们以stackoverflow为例:

发表

Postid          Title          Mess
--------------------------------------------------
1               Title1         This is a question
2               Title2         This is a question1
3               Title3         This is a question2
4               Title4         This is a question3
5               Title5         This is a question4
6               Title6         This is a question5

代码

TagId     PostId     Name
-----------------------------
1         1              Tag1
2         1              Tag2
3         1              Tag3
4         1              Tag4
5         2              Tag5
6         3              Tag6
7         4              Tag7
8         5              Tag8
9         6              Tag9
10        3              Tag10

在这个设计中,我如何在一个查询中获得所有关联标签的问题。这有可能吗?

*的 修改 *

select t.*, p.* from Tags t
join post p on t.postid=p.postid

这样的东西会给我每个问题的所有标签。但我不认为这是有效的。你怎么想。

1 个答案:

答案 0 :(得分:1)

我认为你的榜样很弱。您不应该在用于加入帖子和标签的表格中添加标签名称。

您应该拥有以下表格:

  • 帖子: PostId ,标题,混乱
  • 标签: TagId ,名称
  • Posts_Tags: PostId TagId

如果您不这样做,那么当2个帖子具有相同的标签时,您将拥有许多相同的标签名称,您看到了吗?

现在,为了查询这些表并获得关联标签的所有问题,您应该执行以下操作:

select * from posts p
join posts_tags pt on p.postId = pt.postId
join tags on pt.tagId = t.tagId

您可以说效率较低,但您不在考虑示例中的数据重复,这可能会导致严重错误。