从 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
-- 例如最新的、最旧的等
我有一个稍微棘手的问题要解决,假设我有一个 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
-- 例如最新的、最旧的等