DB2 10 для Z/OS, SQL LIKE Значение столбца плюс подстановочный знак DB2 без потери этапа 1
Итак, это связано с SQL LIKE Столбец Value Plus подстановочный знак DB2, но более конкретный вопрос б / к ОС
Итак, я хочу:
select a.columnA
b.columnZ
from a
join table b
on b.columnB LIKE a.columnA || '%'
b.columnB - это индекс, и я хотел бы, чтобы соединение было выполнено с использованием этого (b/c это массивная таблица). Но, к сожалению, z/OS не позволяет использовать столбец справа от LIKE.
Из другого поста я понимаю, что могу использовать LOCATE, но это скалярная функция, и поэтому она не считается предикатом стадии 1, поэтому я теряю значение индекса.
1 ответ
Одним из вариантов является использование предиката диапазона и объединение высоких значений в конец значения столбца для верхнего конца диапазона. Это эквивалентно аналогичному предикату:
select a.columnA
b.columnZ
from a
join table b
on b.columnB >= a.columnA
and b.columnB < a.columnA || x'FF'
Это то, что мы часто используем, когда я работаю специально, чтобы иметь возможность использовать индексы для частичного совпадения значений, как это.