Я начинаю понимать преимущества отказа от использования varchar для ввода ключей, как описано в здесь
Я работаю с базой данных DB2, которую я не настраивал, в которой есть большая таблица (более 20 миллионов строк) с ключевым полем varchar. Структура таблицы такова:
key_field | matching_field1
000-XXX | 123
0000-XXX | 456
00-XXXXX | 789
key_field
имеет переменную длину. Я пытаюсь использовать key_field
для ссылки на меньшую таблицу с 4k строками. Проблема в том, что после символов в key_field
. Я знаю это, потому что если я ищу конкретную строку, используя
SELECT * WHERE key_field LIKE '000-XXX'
совпадений нет, но если я попробую '000-XXX%'
, будет выбрана строка. Я предполагаю, что это та же самая причина, по которой я не могу ввести свою вторую таблицу, которая содержит соответствующий key_field
, но которая была обрезана, поэтому нет конечных пробелов.
Предполагая, что я не могу редактировать, дублировать или транспонировать эту большую таблицу (по крайней мере, не в массовом порядке из-за ограничений ресурсов), есть ли способ привязать ее к меньшей таблице (4k строк), содержащей тот же key_field
?
Я могу редактировать и управлять меньшей таблицей.
Обновление: выполняя приведенный ниже запрос с использованием RTRIM
, я получаю сообщение об ошибке.
Запрос:
SELECT RTRIM(foreign_key)
FROM Small_Table
EXCEPT SELECT RTRIM(key_field)
FROM Big_Table
Ошибка:
NUMBER OF ROWS DISPLAYED IS 0
SQLCODE = -904, ERROR: UNSUCCESSFUL EXECUTION CAUSED BY AN
UNAVAILABLE RESOURCE. REASON 00C90084, TYPE OF RESOURCE 00000100, AND
RESOURCE NAME DB2-MANAGED SPACE WITHOUT SECONDARY ALLOCATION OR
USER-MANAGED SPACE IN MYDB_NAME
TRIM()
использовать в объединении? - person M O'Connell   schedule 10.11.2016TRIM()
можно использовать в соединении в DB2. Однако эффективность может пострадать. - person M O'Connell   schedule 10.11.2016VARCHAR
игнорируются при выполнении сравнений. (Таким образом, если значениеABC
хранится в столбцеVARCHAR(10)
, предикатWHERE column = 'ABC'
все равно вернет нужную строку. - person Ian Bjorhovde   schedule 10.11.2016WHERE column = 'ABC'
, строка выбирается. - person joshi123   schedule 10.11.2016