联合查询比单独查询产生更多的结果



我正在执行以下查询,该查询对另一个表具有内部连接。

select count(myTable.name) 
from sch2.sample_detail as myTable 
inner join sch1.otherTable as otherTable on myTable.name = otherTable.name 
where otherTable.is_valid = 1 
and myTable.name IS NOT NULL;

这会产生一个4912304的计数。

下面是对单个表(我的表)的查询。

SELECT COUNT(myTable.name) 
from sch2.sample_detail as myTable 
where myTable.name IS NOT NULL;

这将产生一个2864654的计数。

但是这怎么可能呢?两个查询都有where myTable.name IS NOT NULL.

子句。第二个查询不应该产生相同的结果,如果不是甚至更多,因为第二个查询没有otherTable.is_valid = 1子句?为什么内连接产生更高的结果计数?

第一个查询是否有需要修改的地方,请告知,谢谢。

内连接、左连接或交叉连接可以复制行。sch1.otherTable.name不是唯一的,这会导致行重复,因为左表中的每一行都选择了右表中的所有相应行,这是正常的连接行为。

要获得重复的名称列表,使用这个查询并决定如何删除重复的行:filter或distinct或filter by row_number等

select count(*) cnt,
name
from sch1.otherTable
having count(*)>1
order by cnt desc;

如果需要EXISTS(并且不需要从otherTable中选择列),使用left semi join。此外,具有distinct的子查询可用于在连接和筛选之前预聚合名称:

select count(myTable.name) 
from sch2.sample_detail as myTable 
LEFT SEMI JOIN (select distinct name from sch1.otherTable otherTable where otherTable.is_valid = 1 ) as otherTable on myTable.name = otherTable.name 
where myTable.name IS NOT NULL;