我有两个表:公司和联系,关系为一对多。 我有另一张表追踪,它将一些公司确定为其他公司的母公司。
我想编写一个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
的第一个查询,并返回了相同的结果(少于它的含义)。
答案 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。