2012-03-26 6 views
0

Ich erstelle eine Blog-Engine in C# -Webforms, und ich habe den folgenden Code, der alle aktuellen Blog-Posts auswählt, dh sie sollten angezeigt werden und eine Zählung aller Kommentare für jeden Blog-Post und es funktioniert super.innere Verbindung, die nicht alle Zeilen zurückgibt

SELECT PostID, PostTitle, PostDate, PostTeaser, Count(CommentID) AS CountOfCommentID, PostCurrent 
FROM TBLBlogPost 
    INNER JOIN TBLBlogComment ON PostID = PostCommentFK 
GROUP BY PostID, PostTitle, PostDate, PostTeaser, PostCurrent 
HAVING PostCurrent = 'True' 

Das Problem ist, es wählt nur Blog-Beiträge, die mindestens einen Kommentar haben.

Weiß jemand, wie ich das beheben kann?

+0

Bitte geben Sie Ihren Titeln nicht "C#" und so weiter. Dafür sind die Tags da. Und außerdem hat diese Frage überhaupt nichts mit C# zu tun! –

+2

* Knifflige SQL-Anweisung * -> Gibt eine Frage zu zwei Tabellen mit einer 1: n-Beziehung ab. Nicht sicher, ob Trolling ... –

+0

@ ta.speot.is Einverstanden, aber jeder hat ein gewisses Maß an Erfahrung, also vielleicht ist dies schwierig für die OP. Dennoch könnte ein besserer Titel gehabt werden :) –

Antwort

3

Sie einen LEFT JOIN verwenden sollten dann anstelle des INNER JOIN

SELECT PostID, PostTitle, PostDate, PostTeaser, Count(CommentID) AS CountOfCommentID, PostCurrent 
FROM TBLBlogPost 
    LEFT JOIN TBLBlogComment ON PostID = PostCommentFK 
GROUP BY PostID, PostTitle, PostDate, PostTeaser, PostCurrent 
HAVING PostCurrent = 'True' 

INNER JOIN bedeutet, dass der passende Tisch übereinstimmen muss, sonst wird es nicht die resultset füllen. Eine LEFT JOIN bedeutet, dass, wenn die Übereinstimmung nicht gemacht wird, wird es füllen Sie alles aus dieser Tabelle mit NULL Here ist eine gute visuelle Darstellung der verschiedenen SQL-Joins.

+0

Danke Justin, LEFT Join war die Antwort und danke für die Beschreibung, es war sehr hilfreich und öffnete meine Augen für einige weitere SQL-Probleme, die ich in der Vergangenheit hätte besser machen können. Prost –

Verwandte Themen