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

标签 sql ms-access

我有两个表:CompanyContact,它们是一对多的关系。 我还有另一张表 Track,它将一些公司标识为其他公司的母公司。 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 的第一个查询,它返回了相同的结果(比预期的要少)。

最佳答案

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

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

关于sql - 选择具有连接计数记录的不同记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34724457/

相关文章:

mysql - SQL:根据其他重复值选择重复值的精确最大值

ms-access - 如何确保弹出表单在屏幕中央打开?

ms-access - 检查 MS Access Query 中的空值

sql - 如何在 sqlite 中获得列大于零的所有结果?

Python:如何对文本文件中的 SQL 语句进行排序?

mysql - 合并两个表的结果

c++ - 如何获取 Access mdb 表描述注释? (通过 C++)

sql - 查询根据其他字段用最大值填充Null字段

ms-access - 在 Access 2010 中构建搜索表单

MySQL - 两个表,比较两行