Sql server 2008 使用内部联接似乎会导致#temp表中的条目消失
我是SQL的新手,正在使用我们的一家供应商提供给我们的以下代码: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) 发生的情
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是空的。(不应该,但那是另一个问题…)这是一个巨大的帮助,感谢大家。