【发布时间】:2017-06-16 07:53:48
【问题描述】:
在我的项目中,我需要根据同一张表中的旧版本和新版本来查找差异任务。
id | task | latest_Rev
1 A N
1 B N
2 C Y
2 A Y
2 B Y
预期结果:
id | task | latest_Rev
2 C Y
所以我尝试了以下查询
Select new.*
from Rev_tmp nw with (nolock)
left outer
join rev_tmp old with (nolock)
on nw.id -1 = old.id
and nw.task = old.task
and nw.latest_rev = 'y'
where old.task is null
当我的表有超过 20k 条记录时,此查询需要更多时间吗? 如何减少时间?
在我的公司不允许使用子查询
【问题讨论】:
-
不仅仅是什么?你的表是如何索引的?查询计划是什么?
-
不允许使用子查询听起来很奇怪。您可以使用 CTE 吗?派生表?为什么允许你使用 NOLOCK?
-
我的表没有包含所有主字段的聚集索引。它是一个规则。 @JamesZ。
标签: sql sql-server sql-server-2012