例如,我有 2 个表,例如:
表格1:
Column1
0001
0002
000a
表2:
Column2
0001
0002
000a
Column1 和 Column2 的数据类型都是 varchar(10)。我必须将 2 个表连接在一起,所以我的查询应该是
Select * from Table1 join Table2 on Table1.Column1 = Table2.Column2
但是,正如我们所知,以 varchar 类型连接 2 表比以数字类型连接 2 表要慢得多(我的表有数百万行)。我想试试
Select * from Table1 join Table2 on Cast(Table1.Column1 as int) =
Cast(Table2.Column2 as int)
通常,它工作正常且速度更快。但是如果我在第 3 行 (000a) 中遇到异常,我的查询将被破坏。所以,我想找到一个像这样的查询:
Select * from Table1 join Table2 on
try
Cast(Table1.Column1 as int) = Cast(Table2.Column2 as int)
catch if exception then
Table1.Column1 = Table2.Column2
更新: - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------
我有一个理想:
首先,使用 try_cast 选择任何数字数据行:
select * from Table1 t1
join Table2 t2
on try_cast(t1.Column1 as bigint) =try_cast(t2.Column2 as bigint)
之后,选择如果 try_cast 将变为 null 的任何行(异常行):
select * from
(select * from Table1 t1 where try_cast(t1.Column1 as bigint) is NULL and
t1.Column1 is not NULL) as table1
join
(select * from Table2 t2 where try_cast(t2.Column2 as bigint) is NULL and
t2.Column2 is not NULL) as table2
on table1.Column1=table2.Column2
最后将所有 2 个结果结合在一起,我会得到我想要的。我参加了一个测试,它非常快。我的理想有什么问题或者我忘记了什么,请告诉我!