选择具有连接计数记录的不同记录

时间:2016-01-11 14:55:32

标签: sql ms-access

我有两个表:公司联系,关系为一对多。 我有另一张表追踪,它将一些公司确定为其他公司的母公司。 enter image description here

我想编写一个SQL查询,从Track中选择父公司以及每个父母拥有的联系人数量。

SELECT Track.ParentId, Count(Contact.companyId) 
FROM Track     
    INNER JOIN Contact
    ON Track.ParentId = Contact.companyId
GROUP BY Track.ParentId

但是,与运行以下查询时相比,结果记录的记录更少:

SELECT DISTINCT Track.ParentId
FROM Track

我尝试了添加DISTINCT的第一个查询,并返回了相同的结果(少于它的含义)。

2 个答案:

答案 0 :(得分:4)

您正在使用Contact表执行INNER JOIN,这意味着第一个表(本例中为Track)与JOIN ed表不匹配的任何行都不会显示在你的结果。请尝试使用LEFT OUTER JOIN

COUNT Contact.companyId只会计算匹配的行(Contact.companyId不是NULL)。由于您计算的联系人很好,因为它们会计为0.如果您尝试计算其他一组数据并尝试在特定列(而不是COUNT)上执行COUNT(*),那么该列中的任何NULL值都不会计入您的总数,这可能是您想要的,也可能不是。

答案 1 :(得分:0)

我使用了INNER JOIN,它只返回两个表中相同的记录。

要从Track表返回所有记录,以及在Contact表中匹配的记录,我需要使用LEFT JOIN。