2012-04-02 14 views
-3

では、例としてstackoverflowのみましょ一対多1つのクエリでこの中は、それが可能に照会することです

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 

ポスト

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 

タグどのようにして1つのクエリ内の関連するタグを使ってすべての質問を得るのでしょうか?これも可能ですか?

* 編集 *

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

このような何かが私に各質問のためのすべてのタグを与えるだろう。しかし、私はこれが効率的だとは思わない。どう思いますか。

+0

あなたは結合を意味しますか? http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – JKirchartz

+1

http://stackoverflow.com/questions/451415/simulatingをご覧ください。 -group-concat-mysql-function-ms-sql-server-2005 –

+0

すべてのタグを前もって知っていて、ポストごとに複数の結果を扱わない場合は、[ピボット](http://msdn.microsoft .com/ja-us/library/ms177410.aspx)。 – dasblinkenlight

答えて

1

あなたの例は非常に弱いと思います。投稿とタグを結合するために使用する表にタグ名を入れてはいけません。

あなたは以下の表を持っている必要があります。

  • 投稿:PostId、タイトル、メス
  • タグ:TAGID、名前
  • Posts_Tags:PostIdTAGID

もしあなたがこれをしなければ、2つの投稿が同じタグを持っていれば、同じタグ名を持つことになるでしょうか?今

、これらのテーブルを照会して、次の操作を行う必要があり、関連するタグですべての質問を得るために:

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

あなたはそれがあまり効率的ではなく、あなたの中でデータの重複を考慮していないと言うことができますこれは深刻なエラーを引き起こす可能性があります。

+0

ありがとう私はその明確化が必要でした – Luke101

関連する問題