从 table 中选择一个值

Selecting a single value from a table

我有一个稍微棘手的问题要解决,假设我有一个 table 看起来像这样...

 IDn          Val1          Val2
 333XX        SomeVal       SomeVal
 B7B7B7       SomeVal3      SomeVal3

我正在尝试加入另一个 table,并从那个 table 中找到一个新字段。第二个 table 看起来像这样:

  ID          Code      Type
  123         333XX     X1
  123         333XX     X2
  123         ORE22     X3
  555         B7B7B7    Y4
  555         B7B7B7    Y5
  555         B7B7B7    Y6
  555         B6B6B6    Y8
  555         848297    Y9

我知道这个table可能看起来比较乱,但是一般来说ID值,可以对应很多不同的CODE值。类型值可以变化并且不是很一致

因此,如果我们回顾一下我的初始 table,我正在尝试添加一个名为 ID 的新列,我希望看起来像这样:

预期输出:

 IDn       ID         Val1          Val2
 333XX     123        SomeVal       SomeVal
 B7B7B7    555        SomeVal3      SomeVal3

如果我这样做:

 Select t1.Idn, t2.ID from table1 t1 JOIN table2 t2 on t1.Idn = t2.Code

我有很多重复项,但是我想保留第一个 table 中的行数,并且只显示第二个 table

中的 ID 列

您是否尝试过使用 DISTINCT 关键字或分组依据?

Select distinct t1.Idn, t2.ID, t1.val1, t1.val2 
    from table1 t1 
        JOIN table2 t2 on t1.Idn = t2.Code

Select t1.Idn, t2.ID, t1.val1, t1.val2 
    from table1 t1 
        JOIN table2 t2 on t1.Idn = t2.Code
    group by t1.Idn, t2.ID, t1.val1, t1.val2

可能是性能最高的方法使用 OUTER APPLY:

Select t1.Idn, t2.ID
from table1 t1 outer apply
     (select top (1) t2.*
      from table2 t2 
      where t1.Idn = t2.Code
     ) t2;

这可以很好地利用table2(code)上的索引。如果您想要特定的 id,您可以添加 ORDER BY -- 例如最新的、最旧的等