表连接优先级属性

时间:2016-01-28 22:15:14

标签: sql sql-server

基本上,我有一个具有优先级属性和值的表,如

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中执行此操作?

5 个答案:

答案 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"从第二张表..

这是一个样本 https://stackoverflow.com/a/18694271/444149

答案 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