左外连接返回的行数多于无连接数

时间:2012-01-06 18:29:04

标签: sql sql-server sql-server-2008

我对以下问题感到困惑。我正在做一个左外连接,它返回的行数多于没有连接数。

select COUNT(*) specimen_id from QuickLabDump a
left outer join PracticeandPhysician c
on (a.[Requesting Physician]=c.doctorfirstname+' '+c.DOCTORLASTNAME
        and a.[practice code]=c.practicecode)
 where 
DATEPART(mm, [DATE entered]) =12
and
DATEPART(yy, [DATE entered])=2011

收益108387

,而

select COUNT(*) specimen_id from QuickLabDump a
 where 
DATEPART(mm, [DATE entered]) =12
and
DATEPART(yy, [DATE entered])=2011

收益108357

他们不应该返回相同数量的行吗?

4 个答案:

答案 0 :(得分:8)

第二个表在主表中每1行可能有更多行,即点

答案 1 :(得分:5)

当联接的PracticeandPhysician表包含QuickLabDump表中某个键的多行时,会发生这种情况。

此查询

select COUNT(*), c.practicecode, a.[Requesting Physician],speciment_id
from QuickLabDump a
left outer join PracticeandPhysician c
on (a.[Requesting Physician]=c.doctorfirstname+' '+c.DOCTORLASTNAME
    and a.[practice code]=c.practicecode)
where 
DATEPART(mm, [DATE entered]) =12
and
DATEPART(yy, [DATE entered])=2011
GROUP BY c.practicecode, a.[Requesting Physician], speciment_id
HAVING COUNT(*) > 1

应该告诉你哪些行有重复。

答案 2 :(得分:3)

令人困惑,是的,但可以理解。

如果要查看第一个不在第二个查询中的查询所获得的内容,请选择第一个结果集中不在第二个结果集中的记录。

您也可以尝试将DISTINCT添加到您的查询中。

答案 3 :(得分:1)

PractiveandPhysician表格中有重复项。

只有当您加入一个永远不会获得更多记录的唯一值时,才会这样做。