2011-11-14 1 views
0

異なっている私は、次の表を持っている値のリストから「中を選択」:PL/SQL型が外側のクエリ

Table1 (Col1 : varchar2, Col2 : number, Col3 : number) 
Table2 (Col1 : number, Col2 : varchar2, Col3 : varchar2) 

私はこのようなクエリを実行したい:

select distinct Col2 from Table1 where Col1 in 
(
    select Col1 from Table2 
) 

Table1.Col1のタイプはvarchar2で、Table2.Col1のタイプはnumberです。そう、私はいくつかのキャスティングを行う必要がありますが、それは成功することができないようです。

問題は、クエリを実行しようとする試みは、以下のエラーを返すことである:

ORA-01722: invalid number 
    01722. 00000 - "invalid number" 
    *Cause:  
    *Action: 

Table1.Col1は、いくつかのnull値が含まれています。

SELECT distinct col2 
    FROM table1 
WHERE col1 IN (SELECT to_char(col1) 
        FROM table2) 

のようなものが動作するはず

答えて

4

。二つのテーブルの相対的なサイズに応じて、あなたがint列にIN句でvarchar2値を入れしようとしているので、EXISTS代わり

SELECT distinct col2 
    FROM table1 t1 
WHERE EXISTS(SELECT 1 
       FROM table2 t2 
       WHERE to_char(t2.col1) = t1.col1); 
0

あなたのエラーORA-01722が行う方が効率的かもしれ。

IN節にint値を指定していることを確認する必要があります。同じデータ型を与えます。

関連する問題