sql - левое соединение - количество - PullRequest
7 голосов
/ 07 февраля 2010

предположим, у меня есть две таблицы. статьи и комментарии.

когда я выбираю столбцы из таблицы статей, я также хочу указать количество комментариев к статье в одном и том же операторе выбора ... (предположим, общее поле между этими двумя таблицами - articleid)

как мне это сделать? Я могу сделать это, но я не знаю, будет ли мой путь эффективным, поэтому я хочу научиться правильному.

Ответы [ 5 ]

12 голосов
/ 07 февраля 2010

Это должно быть более эффективным, поскольку группировка выполняется только в таблице комментариев.

SELECT  
       a.ArticleID, 
       a.Article, 
       isnull(c.Cnt, 0) as Cnt 
FROM Article a 
LEFT JOIN 
    (SELECT c.ArticleID, count(1) Cnt
     FROM Comment c
    GROUP BY c.ArticleID) as c
ON c.ArticleID=a.ArticleID 
ORDER BY 1
4 голосов
/ 07 февраля 2010

Использование:

   SELECT a.articleid, 
          COUNT(*) AS num_comments
     FROM ARTICLES a
LEFT JOIN COMMENTS c ON c.articleid = a.articleid
 GROUP BY a.articleid

Какие бы столбцы вы ни выбрали из таблицы ARTICLES, вы должны будете определить их в предложении GROUP BY, поскольку для них не выполняется агрегатная функция.

2 голосов
/ 07 февраля 2010

Это должно сделать это ..

SELECT
   article_column_1, article_column_2, count( ct.articleid) as comments
FROM
   article_table at
   LEFT OUTER JOIN comment_table ct ON at.articleid = ct.articleid
GROUP BY 
   article_column_1, article_column_2
0 голосов
/ 04 декабря 2015
    -- Working Syntax example from my environment changed to fit this context. 
SELECT a.article
    ,A.articleid
    ,(
        SELECT Count(B.articleid)
        FROM dbo.comment AS B
        WHERE A.articleid = B.articleid
        ) AS comment#
    ,(
        SELECT Count(C.articleid)
        FROM dbo.comments AS C
        WHERE A.articleid = C.articleid
        ) AS comments#
FROM dbo.article AS A;
0 голосов
/ 07 февраля 2010
SELECT 
       a.Article,
       a.ArticleID,
       t.COUNTOFCOMMENTS
FROM
       Article a
LEFT JOIN
       Comment c
ON c.ArticleID=a.ArticleID
LEFT JOIN
(SELECT ArticleID, COUNT(CommentID) AS COUNTOFCOMMENTS FROM Comments GROUP BY ArticleID) t
ON t.ArticleID = a.ArticleID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...