2011-11-14 2 views
0

나는 다음과 같은 테이블이 있습니다PL/SQL 유형이 외부 쿼리는 다른 값 목록에서 '의 선택'

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

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

나는이 같은 쿼리를 실행하려면를

Table1.Col1은 varchar2 유형이고 Table2.Col1은 숫자 유형입니다. 그래서, 나는 약간의 주물을 할 필요가있다, 그것은 보인다. 그러나 성공에 실패한다.

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

뭔가. 두 테이블의 상대적 크기에 따라, 어떻게하는 것이 더 효율적이 될 수있는 EXISTS 대신

당신이 int 컬럼에 대한 IN 절에 varchar2 값을 넣어 위해 노력하고 있기 때문에
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 값을 제공해야합니다. 동일한 데이터 유형을 지정하십시오.