我有两个表,每个表都有以下 id 列:
Ticker
SEDOL,
ISIN
每行都有一个或多个填充有值的列。我想加入任何具有价值的列。有谁知道如何加入这种方式?谢谢。
我有两个表,每个表都有以下 id 列:
Ticker
SEDOL,
ISIN
每行都有一个或多个填充有值的列。我想加入任何具有价值的列。有谁知道如何加入这种方式?谢谢。
Ticker
,SEDOL
并且ISIN
都是不同的格式,所以我认为您需要
SELECT *
FROM T1
JOIN T2
ON T1.Ticker = T2.Ticker
OR T1.SEDOL = T2.SEDOL
OR T1.ISIN = T2.ISIN
但是,如果表很大,性能会很差,请参阅在 INNER JOIN 条件中使用“或”是一个坏主意吗?.
如果两个表在为特定安全性提供的列上是一致的,那么这可能会更快,因为它可以使用散列或合并连接,而不仅仅是嵌套循环。
SELECT *
FROM T1
INNER JOIN T2
ON EXISTS (SELECT T1.Ticker,
T1.SEDOL,
T1.ISIN
INTERSECT
SELECT T2.Ticker,
T2.SEDOL,
T2.ISIN)
或者如果表格不一致,那么另一个选项可能是
SELECT *
FROM T1
INNER JOIN T2
ON T1.Ticker = T2.Ticker
UNION
SELECT *
FROM T1
INNER JOIN T2
ON T1.SEDOL = T2.SEDOL
UNION
SELECT *
FROM T1
INNER JOIN T2
ON T1.ISIN = T2.ISIN
您可以在 ON 部分中使用 ISNULL 关键字。
Select *
From tab1
inner join tab2 on tab1.ColName = Isnull(Isnull(tab2.Ticker,tab2.SEDOL),tab2.ISIN)
在评论后添加:此查询是假设您在一个表的一个列中有一个值,而在另一个中有 3 个列,其中 2 个始终为空,一个具有应该与第一个表中的列匹配的值。用于从 3 个值中选择正确的ISNULL
值。
select *
from T1
inner join T2 on T2.Ticker = coalesce(T1.Ticker, T1.SEDOL, T1.ISIN)
但如果 T1 中的值可能不为空,但 T2 没有对应的值,则可以
select *
from T1
outer apply
(
select top 1 T2.Col
from T2
where T2.Ticker in (T1.Ticker, T1.SEDOL, T1.ISIN)
order by
case
when T2.Ticker = T1.Ticker then 0
when T2.Ticker = T1.SEDOL then 1
when T2.Ticker = T1.ISIN then 2
end
)
或者你可以做
select *, coalesce(T21.Col, T22.Col, T23.Col) as T2_Col
from T1
left outer join T21 on T21.Ticker = T1.Ticker
left outer join T22 on T22.Ticker = T1.SEDOL
left outer join T23 on T23.Ticker = T1.ISIN