我有两个表:Company 和Contact,它们是一对多的关系。 我还有另一张表 Track,它将一些公司标识为其他公司的母公司。
我想编写一个 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
的第一个查询,它返回了相同的结果(比预期的要少)。
最佳答案
您正在对 Contact 表执行 INNER JOIN
,这意味着第一个表(在本例中为 Track)中与 JOIN
不匹配的任何行ed 表不会显示在您的结果中。尝试改用 LEFT OUTER JOIN
。
带有 Contact.companyId
的 COUNT
将只计算匹配的行(Contact.companyId
不是 NULL
)。由于您计算的是联系人,这很好,因为它们将计为 0。如果您尝试计算其他一些数据集并尝试在特定列上执行 COUNT
(而不是 COUNT (*)
) 那么该列中的任何 NULL
值都不会计入您的总数,这可能是也可能不是您想要的。
关于sql - 选择具有连接计数记录的不同记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34724457/