2012-04-02 3 views
-3

Stackoverflow als Beispiel Lets nehmen:Ist es möglich, eine Eins-zu-viele zur Abfrage mit einer Abfrage

Beitrag

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 

Stichworte

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 

In dieser Design, wie würde ich alle Fragen mit den zugehörigen Tags in einer Abfrage bekommen. ist das überhaupt möglich?

* bearbeiten *

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

So etwas würde mir alle Tags für jede Frage. Aber ich denke nicht, dass das effizient ist. Was denken Sie.

+0

meinst du verbindet? Check out http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – JKirchartz

+1

Bitte werfen Sie einen Blick auf http:// Stackoverflow.com/questions/451415/simulating -group-concat-mysql-function-in-ms-sql-server-2005 –

+0

Wenn Sie alle Tags im Voraus kennen und sich nicht mit mehreren Ergebnissen pro Post befassen möchten, können Sie [pivot] (http://msdn.microsoft.microsoft.com) verwenden .com/de-de/library/ms177410.aspx). – dasblinkenlight

Antwort

1

Ich denke, dass Ihr Beispiel sehr schwach ist. Sie sollten den Tag-Namen nicht in der Tabelle haben, die Sie zum Beitreten von Beiträgen und Tags verwenden.

Sie sollten die folgenden Tabellen:

  • Beiträge: postID, Titel, Mess
  • Schlagwörter: TagId, Namens-
  • Posts_Tags: postID, TagId

Wenn Sie dies nicht tun, dann haben Sie viele gleiche Tag-Namen, wenn 2 Beiträge das gleiche Tag haben, sehen Sie?

Um nun diese Tabellen abzufragen und alle Fragen mit den zugehörigen Tags zu erhalten, sollten Sie Folgendes tun:

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

Man kann sagen, es ist weniger effizient, aber Sie in Betracht ziehen nicht Datenduplizierung in Ihrem Beispiel, das schwerwiegende Fehler verursachen kann.

+0

Danke, ich brauchte diese Klarstellung – Luke101

Verwandte Themen