У меня есть запрос, который объединяет две таблицы. В одной таблице есть столбец типа varchar, а в другой таблице — числовой тип. Я выполнил свой запрос к трем базам данных оракула и вижу некоторые странные результаты, которые, надеюсь, можно объяснить. В двух базах данных работает что-то вроде следующего.
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=a.col1;
В этом запросе tableA.col1 имеет тип number, а tableB.col2 — тип varchar. Это отлично работает в двух базах данных, но не в третьей. В третьем получаю ошибку (ORA-01722). В третьем мне нужно сделать что-то вроде...
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=to_char(a.col1);
Это работает во всех базах данных. У меня вопрос почему? Вышеупомянутый запрос является упрощенным, а реальный запрос немного сложнее и извлекает много данных, поэтому первая версия намного быстрее. Если бы я мог заставить это работать во всех средах, было бы здорово.
Кто-нибудь знает, почему это может работать в некоторых базах данных оракула, а не в других без приведения типа данных? Есть ли глобальная настройка, которая разрешает такое поведение?