SQL结果计数在加入同一个表时发生更改

SQL结果计数在加入同一个表时发生更改,sql,sql-server,join,Sql,Sql Server,Join,我有一个复杂的查询,我要连接多个表。结果行计数为1579633。但是,当我为现有表添加左连接(即左连接同一个表两次)时,生成的行计数更改为1583755。我认为有重复的,并试图用不同的条款过滤它们,但没有任何运气。以下是查询: select count(*) from t1 left join (select t2a, t2b from t2 where t2c = 'FOO' group by t2a, t2b) r on t1.t1a = r.t2b left join (select t2

我有一个复杂的查询,我要连接多个表。结果行计数为1579633。但是,当我为现有表添加左连接(即左连接同一个表两次)时,生成的行计数更改为1583755。我认为有重复的,并试图用不同的条款过滤它们,但没有任何运气。以下是查询:

select count(*) from t1 left join
(select t2a, t2b from t2 where t2c = 'FOO'
group by t2a, t2b) r on t1.t1a = r.t2b left join
(select t2a, t2b from t2 where t2d = 'BAR'
group by t2a, t2b) r2 on r.t2a = r2.t2a
where t1.ID in (...)
请注意,如果可能的话,我会将
t2
联接组合成一个联接,但是
t2
中匹配
'FOO'
'BAR'
的行是不同的。因此,我从
t2
中选择
t2a
值的子集,然后使用该子集匹配具有相同
t2a
值和
t2d='BAR'
的其他行。每个结果行的格式应为:

t1.t1a | t1.t1b | ... | t2.t2a | t2.t2b
t2a
可能为空,如果为空,
t2b
也可能在结果集中


t2
的第二个左连接在结果集中引入了不应该存在的其他行。有什么想法吗?

我认为你的假设是正确的,即存在重复项——对于t2a的某些值,t2b的唯一值不止一个。尝试运行以下SQL:

SELECT Base.t2a, COUNT(*) as t2bcnt
FROM
(
select t2a, t2b from t2 where t2d = 'BAR'
group by t2a, t2b
) AS Base
GROUP BY Base.t2a
HAVING COUNT(*)>1
ORDER BY Base.t2a
(请注意,内线是第二个左联接中的查询)


这将为您提供第二次查询中“分解”行的重复项。

我看到的是r,但不是r1,如“r1.t2a=r2.t2a”。对不起,输入错误,我已修复了结果中的0.72行,大多数是t2bcnt=2。我注意到一个“5”和一对“3”。