0

我有以下表格:

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 包含一些空值。

4

2 回答 2

4

就像是

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

应该管用。EXISTS根据两个表的相对大小,执行替换可能更有效

SELECT distinct col2
  FROM table1 t1
 WHERE EXISTS( SELECT 1
                 FROM table2 t2
                WHERE to_char(t2.col1) = t1.col1 );
于 2011-11-14T17:49:12.207 回答
0

您的错误 ORA-01722 是因为您试图将varchar2值放入列的IN子句中int

您必须确保在该IN子句中提供 int 值。给出相同的数据类型。

于 2011-11-14T17:49:27.667 回答