たとえば、次のような 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 つの結果をすべて結合すると、必要なものが得られます。私はテストを受けますが、それはかなり速いです。私の理想に何か問題があるか、私が忘れている何かがある場合は、私に知らせてください!