2012-03-26 4 views
0

Я создаю движок блога в C# Webforms, и у меня есть следующий код, который отображает все текущие посты в блоге, то есть они должны отображаться и подсчитывать все комментарии для каждого сообщения в блоге и он отлично работает.internal Присоединиться не возвращать все строки

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' 

Проблема заключается в том, что он выбирает только записи блога, содержащие хотя бы один комментарий.

Кто-нибудь знает, как я могу это исправить?

+0

Пожалуйста, не прикрепите свои заголовки к «C#» и тому подобное. Для этого нужны теги. И кроме того, этот вопрос не имеет ничего общего с C#! –

+2

* Tricky SQL Statement * -> Сообщает вопрос о двух таблицах с отношением «один-ко-многим». Не уверен, что троллинг ... –

+0

@ ta.speot.is Согласен, но у каждого есть определенный уровень опыта, поэтому, возможно, это сложно для ОП. Тем не менее, лучшего титула можно было бы получить :) –

ответ

3

Вы должны использовать LEFT JOIN, то вместо 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 означает, что таблица соответствия должны соответствовать или иначе она не заполнит ResultSet. A LEFT JOIN означает, что если матч не выполнен, он заполнит все из этой таблицы с помощью NULL

Here - хорошее визуальное представление различных соединений SQL.

+0

Спасибо, Justin, LEFT join был ответом и благодарностью за описание, это было очень полезно и открыло мне глаза на некоторые другие проблемы SQL, которые я мог бы сделать лучше в прошлом. ура –

Смежные вопросы