Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 可以用一个查询查询一对多吗_Sql_Sql Server 2008 - Fatal编程技术网

Sql 可以用一个查询查询一对多吗

Sql 可以用一个查询查询一对多吗,sql,sql-server-2008,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

以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

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

我认为你的例子很弱。在用于连接文章和标记的表中不应包含标记名

您应该有以下表格:

  • 帖子:帖子,标题,混乱
  • 标记:TagId,名称
  • 贴子标签:postedTagId
如果你不这样做,那么当两篇文章有相同的标签时,你会有许多相同的标签名,你看到了吗

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

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

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

您是说连接?退房请看一看你能显示你想要的作为一个查询的输出吗?“使用相关标签获取所有问题”相当模糊。如果您事先知道所有标签,并且不想在每篇文章中处理多个结果,您可以使用。您认为哪种方法更有效?随着您添加更多信息,这已不再是一个问题。谢谢,我需要澄清