2つのテーブルを結合するクエリがあります。1つのテーブルにはvarchar型の列があり、もう1つのテーブルにはnumber型の列があります。3つのOracleデータベースでクエリを実行しましたが、説明できると思いますが、奇妙な結果がいくつか見られます。2つのデータベースでは、次のようなものが機能します。
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=a.col1;
このクエリでは、tableA.col1はタイプnumberであり、tableB.col2はタイプvarcharです。これは、2つのデータベースでは正常に機能しますが、3番目のデータベースでは機能しません。3番目に(ORA-01722)エラーが発生します。3番目に私は次のようなことをする必要があります...
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=to_char(a.col1);
これはすべてのデータベースで機能します。私が持っている質問はなぜですか?上記は単純化されたクエリであり、実際のクエリはもう少し複雑で多くのデータを取得するため、最初のバージョンの方がはるかに高速です。それをすべての環境で機能させることができれば、それは素晴らしいことです。
これが一部のOracleデータベースで機能し、データ型にキャストされていない他のデータベースでは機能しない理由を誰かが知っていますか?そのような動作を可能にするグローバル設定はありますか?