PL / SQL «выбрать в» из списка значений, тип которых отличается от внешнего запроса - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть следующие таблицы:

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 имеет типчисло.Итак, мне нужно выполнить некоторое приведение, кажется, но оно не удается.

Проблема в том, что любые попытки выполнить запрос возвращают следующую ошибку:

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

Table1.Col1содержит некоторые нулевые значения.

Ответы [ 2 ]

4 голосов
/ 14 ноября 2011

Что-то вроде

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 );
0 голосов
/ 14 ноября 2011

Ваша ошибка ORA-01722 в том, что вы пытаетесь поместить значения varchar2 в предложение IN для столбца int.

Вы должны убедиться, что вы вводите значения int в этом предложении IN. Дайте те же типы данных.

...