SQL: Get all records from one table AND a count of records from a second table?

前端 未结 3 1786
我寻月下人不归
我寻月下人不归 2021-01-12 13:15

Say there are two tables:

TABLE A

messageID / Message                     / More..
1         / This is the first message   / Etc..
2         


        
相关标签:
3条回答
  • 2021-01-12 13:56

    You can use CTE for the same.

    ;WITH CTE_MessageCount (MessageId, Count)
    AS
    (
    SELECT MessageId, Count(*) FROM TableB GROUP BY MessageId
    ) 
    
    SELECT A.*, T.*
    FROM tableA A JOIN CTE_MessageCount T ON A.messageID = T.MessageID
    
    0 讨论(0)
  • 2021-01-12 13:57

    Try this query:

    SELECT a.*, b.msgCount
      FROM tableA a LEFT JOIN 
        ( SELECT messageID, COUNT(1) AS msgCount FROM tableB b GROUP BY messageID) b
            ON a.messageID =  b.messageID 
    
    0 讨论(0)
  • 2021-01-12 14:02

    Scalar subquery will work:

    SELECT tableA.*
        ,(SELECT count(commentID) FROM tableB WHERE tableA.messageID = tableB.messageID) as commentcount 
    FROM tableA
    

    As usual, there are a lot of ways to skin this cat, with varying performance profiles.

    When using a GROUP BY, all columns in the output either need to be in the GROUP BY or in aggregate functions - even though there is no variation in the other columns within a messageID, they still would need to be in the GROUP BY.

    0 讨论(0)
提交回复
热议问题