有人可以解释一下为什么如果我使用SELF JOIN和COUNT它会给我不同的结果而不仅仅是使用COUNT命令?
与ControlNo
列相同的表格。列中的值不是唯一的。
此查询为我提供了总计数15586
。
select (Select COUNT(ControlNo)
from tblQuotes Q1
where Q1.ControlNo = a.ControlNo
) QuotedTotal
FROM tblQuotes a
inner join lstlines l on a.LineGUID = l.LineGUID
where l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016
但是,如果我运行此查询,它会给我总计数15095
。
select COUNT(ControlNo) as QuotedTotal
from tblQuotes a
inner join lstlines l on a.LineGUID = l.LineGUID
where l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016
究竟有什么改变总量和原因?
为什么我会使用第一个场景?
并且有任何方法可以修改第一个查询以获得15586
的总和而不会分解每一行吗?
谢谢
答案 0 :(得分:1)
这似乎是因为字段ControlNo
不是唯一的,并且有一些记录共享该值,尽管并非所有记录都与该条件的lstlines
表连接。所以基本上你的上一个查询是:
SELECT COUNT(a.ControlNo)
FROM lstlines l
INNER JOIN tblQuotes a ON a.LineGUID = l.LineGUID
WHERE l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016
虽然第一个基本上做了:
SELECT COUNT(b.ControlNo)
FROM lstlines l
INNER JOIN tblQuotes a ON a.LineGUID = l.LineGUID
INNER JOIN tblQuotes b ON a.ControlNo = b.ControlNo
WHERE l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016
正如您所看到的,在第二个查询中,您不仅计算与lstlines
表匹配的行,还计算tblQuotes
中与ControlNo
具有相同lstlines
的所有行。与//$("#read-more").click(function() {
// $(".overlay").show();
//});
匹配的人。