基本上,我有一个带有优先级属性和值的表,例如
TargetID Priority_Column (int) Value_column
1 1 "value 1"
1 2 "value 2"
1 5 "value 5
2 1 "value 1"
2 2 "value 2"
我想将另一个表与此表连接,
ID Name
1 "name 1"
2 "name 2"
但仅使用优先级最高的行。
结果就像
TargetID Priority_Column (int) Name Value_column
1 5 "name 1" "value 5"
2 2 "name 2" "value 2"
我当然可以使用像python这样的高级语言为每个ID计算最高优先级的行。
但这看起来效率低下,有没有办法在sql中直接做到这一点?
一种方法是使用outer apply
:
select t2.*, t1.*
from table2 t2 outer apply
(select top 1 t1.*
from table1 t1
where t2.id = t1.targetid
order by priority desc
) t1;
我应该注意,在SQL Server中,这通常是最有效的方法。它将充分利用上的索引table1(targetid, priority)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句