我有一个运行速度非常慢的存储过程。因此,我想在单独的视图中提取一些查询。
我的代码看起来像这样:
DECLARE @tmpTable TABLE(..)
INSERT INTO @tmpTable (..) *query* (returns 3000 rows)
Select ... from table1
inner join table2
inner join table3
inner join @tmpTable
...
然后我提取(复制 - 粘贴)* query *并将其放在视图中 - 即vView。
这样做会给我一个不同的结果:
Select ... from table1
inner join table2
inner join table3
inner join vView
...
为什么呢?我可以看到vView和@tmpTable都返回3000行,所以它们应该匹配(也检查除了查询)。
任何评论都会受到很多评论,因为我觉得这很困惑......
已编辑:
这是获取结果的完整查询(使用@tmpTable或vView给出了不同的结果,尽管看起来相同):
select dep.sid as depsid, dep.[name], COUNT(b.sid) as possiblelogins, count(ls.clientsid) as logins
from department dep
inner join relationship r on dep.sid=r.primarysid and r.relationshiptypeid=27 and r.validto is null
inner join [user] u on r.secondarysid=u.sid
inner join relationship r2 on u.sid=r2.secondarysid and r2.validto is null and r2.relationshiptypeid in (1,37)
inner join client c on r2.primarysid=c.sid
inner join ***@tmpTable or vView*** b on b.sid = c.sid
left outer join (select distinct clientsid from logonstatistics) as ls on b.sid=ls.clientsid
GROUP BY dep.sid, dep.[name],dep.isdepartment
HAVING dep.isdepartment=1
答案 0 :(得分:1)
如果你改成这个,你可能不需要视图/表。
它加入了client c
,似乎只有加入logonstatistics
--remove inner join ***@tmpTable or vView*** b on b.sid = c.sid
--change JOIN
left outer join (select distinct clientsid from logonstatistics) as ls on c.sid=ls.clientsid
并在SELECT子句中将COUNT(b.sid)
更改为COUNT(c.sid)
否则,如果您得到不同的结果,我可以看到两个选项:
最后,当你说“不同的结果”时你的意思是你得到x2或x3行吗?一个不同的COUNT?什么?