Вот оно.
У меня есть две таблицы: «Приложение и отчет».
В таблицах есть общий столбец (appId, внешнийAppId соответственно), который можно соединить, чтобы найти уникальные значения.
Мои проблемы, когда я присоединяюсь к этим двум таблицам, я получаю значения, которых я действительно не хочу.
Примерные значения
Точные значения совпадения при соединении оракула
Application Report
No appId ReportNo ExternalAppId
1 123 1 123
2 456 2 0000
3 789 3 321
Так что, когда я говорю Application.appId = Report.ExternalAppId в моем где состояние, она возвращается мне строки 123 и 0000из отчетов таблицы.
Ведущие нули не учитываются в соединении.
Мне нужен результат только с точными совпадениями.
В этом случае только первая строка. Причиной проблемы, которую я считаю, является appId, является номер, а ExternalAppId - varchar.
Я тоже не могу изменить это. Есть ли обходной путь?
Я видел регулярное выражение, которое может удалить ведущие нули и затем совпадать, но просто хочу знать, есть ли лучшее решение.
т.е. могу ли я указать, что соединение будет работать только для значений с точным соответствием?
Именно то, что я искал. Я знал, что что-то не так с этим соединением. Большое спасибо ! – jijo
Но я все еще удивляюсь, почему Oracle позволяет пользователю делать это, вместо того, чтобы бросать синтаксическую ошибку или что-то во время выполнения запроса, как и все другие языки программирования. – jijo
@jijo Вы должны знать тип данных ваших столбцов. Нет ничего важнее данных в базе данных :) Также это может быть рекомендация ANSI, поскольку [Mysql ведет себя так) (http://sqlfiddle.com/#!2/f0f7f/1), [SQLLite] (http : //sqlfiddle.com/#! 7/f0f7f/1) также и [SQL Server] (http://sqlfiddle.com/#!6/f0f7f/1). Только [PostgreSQL] (http://sqlfiddle.com/#!12/f0f7f/1) вызывает ошибку. –