我有两个表(主 - 细节关系)。主表有一列(称为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,特定于数据库的语句对我来说没问题。但是,通用陈述会更好。
谢谢!
答案 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
);
编辑:
如果您想要统计,请使用join
和group 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);