如何查找总计不准确的主记录

时间:2017-02-09 00:14:22

标签: sql sql-server

我有两个表(主 - 细节关系)。主表有一列(称为total),记录同一主记录的详细记录数。拥有此列是出于性能原因)。以下是表格规格:

table: MySum
column: id
column: total (total of MyDetail records for the same MySum record)

table: MyDetail
column: name
column: MySum

由于删除了详细信息记录,主表中的总数可能不正确,因此我希望找到总计不准确的主记录。这是我的SQL。但是,它会生成零记录,我知道根据实际数据这是不对的。

select s.id, s.total from MySum s where s.total <> (select count(*) from MyDetail d where s.id = d.MySum group by d.MySum)

什么是正确的SQL语句?

我正在使用MS SQL Server,特定于数据库的语句对我来说没问题。但是,通用陈述会更好。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想在where中进行计算,可以。您只需要相关的子查询而不是group by

select s.id, s.total
from MySum s
where s.total <> (select count(*)
                  from MyDetail d
                  where s.id = d.MySum
                 );

编辑:

如果您想要统计,请使用joingroup by

select s.id, s.total, d_cnt
from MySum s left join
     (select d.MySum, count(*) as d_cnt
      from MyDetail d
      group by d.MySum
     ) d
     on s.id = d.MySum
where s.total <> d_cnt or not (s.total = 0 and d_cnt is null);