基本上,我有一个具有优先级属性和值的表,如
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中执行此操作?
答案 0 :(得分:3)
有几种选择。这是一个使用@"^(?:[A-Za-z0-9_]+')?[A-Za-z0-9_]+\s?,\s?(?:[A-Za-z0-9_]+')?[A-Za-z0-9_]+$
:
row_number
答案 1 :(得分:2)
一种方法是使用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)
上的索引。
答案 2 :(得分:1)
如果我理解你的问题 - 你想要一个" Max By"从第二张表..
答案 3 :(得分:1)
如果我正确理解你的要求,你可以编写一个sql查询,你可以相应地获得max()优先级或min()优先级。
在您的情况下,将最高优先级作为必需结果,查询应为:
select a.TargetID, a.[Value_column], b.ID, b.Name
from TableA a
join TableB b
on a.TargetID = b.ID
where a.Priority_Column = (select max(z.Priority_Column) from TableA z
and z.ID = a.TargetID)
...已编辑以反映您的结果集
答案 4 :(得分:1)
gradle.properties