Sql server 2008 使用内部联接似乎会导致#temp表中的条目消失

Sql server 2008 使用内部联接似乎会导致#temp表中的条目消失,sql-server-2008,Sql Server 2008,我是SQL的新手,正在使用我们的一家供应商提供给我们的以下代码: SELECT DISTINCT MriPatients.PatientID INTO #UniquePt FROM MriPatients INNER JOIN #TotalPopulation ON MriPatients.PatientID = #TotalPopulation.PatientID Set @TotalUniquePatients = (Select Count(*) FROM #UniquePt) 发生的情

我是SQL的新手,正在使用我们的一家供应商提供给我们的以下代码:

SELECT DISTINCT MriPatients.PatientID
INTO #UniquePt
FROM MriPatients
INNER JOIN #TotalPopulation ON MriPatients.PatientID = #TotalPopulation.PatientID
Set @TotalUniquePatients = (Select Count(*) FROM #UniquePt)
发生的情况是,设置行导致@TotalUniquePatients设置为0,即使我们的数据库中有许多唯一的患者ID。随后,该值将用作除法中的分母,从而导致被0除的错误

现在,在我看来,通过在MriPatients表上使用countdistinct,这很容易解决;那么你根本不需要创建#UniquePt…这是唯一使用表的地方。但是,我不明白为什么代码在计数时得到0的结果#UniquePt。如果删除内部联接,集合将返回正确的结果……那么内部联接对#UniquePt有什么作用呢


如果重要的话,我们使用的是SQL Server 2008。

内部联接使您只在
#TotalPopulation
表中插入具有匹配的
PatientID
的记录

我猜您没有,或者该表没有填充,这导致了问题


您首先加入它有什么原因吗?

由于以下两种情况之一,结果为0:

  • #总人口
    为空
  • #TotalPopulation
    不包含与
    mripients
    中的记录具有相同值的
    PatientID
    记录
您如何填充
#总体填充


一个
countdistinct
不一定会做同样的事情。这取决于您用什么填充
#TotalPopulation
。如果您想要的只是
MriPatients
中唯一患者的数量,那么是的,
countdistinct
将起作用。但是,如果您根据某种逻辑填充
#TotalPopulation
,则它们是
计数不同的
不一定会给出与联接表的
计数相同的结果。

如何构建
#TotalPopulation
?这就是我下一步要解决的问题。非常感谢到目前为止的答案,它更有意义。问题是我目前对内部连接的作用理解有限:)#事实上,TotalPopulation是空的。(不应该,但那是另一个问题…)这是一个巨大的帮助,感谢大家。