Inner join по строковым столбцам с разным Collate

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
Кузнецов Евгений
Сообщения: 144
Зарегистрирован: 16 фев 2006, 22:36

Inner join по строковым столбцам с разным Collate

Сообщение Кузнецов Евгений » 12 ноя 2006, 21:48

Добрый день!

Наблюдал сейчас забавное поведение сервера FB 1.5.3

CREATE table Table1
(Column1 VARCHAR(255) collate pxw_cyrl);
CREATE table Table2
(Column2 VARCHAR(255));


insert into Table1 values ('Строка Первая');
insert into Table1 values ('Строка вторая');
insert into Table1 values ('Строка третья');

insert into Table2 values ('Строка Первая');
insert into Table2 values ('Строка вторая');
insert into Table2 values ('Строка третья');

Следите за руками:

select * from table1 t1 left join Table2 t2
on t1.column1 = t2.column2

PLAN JOIN (T1 NATURAL,T2 NATURAL)

Результат:

COLUMN1 COLUMN2
Строка Первая Строка Первая
Строка вторая Строка вторая
Строка третья Строка третья

А теперь

select * from table1 t1 inner join Table2 t2
on t1.column1 = t2.column2

Что получаем:
COLUMN1 COLUMN2
Строка Первая Строка Первая
Строка третья Строка третья

Дело, как Вы уже догадались, в плане запроса
PLAN MERGE (SORT (T2 NATURAL),SORT (T1 NATURAL))

А Collate-то у нас по моей забывчивости разный, и сортировка идет тоже по-разному. Да здравствует единый Collate на все столбцы в базе! :)

P.S. Не знаю, считать ли это багом, но другой Plan серверу навязать не удалось :(

Ответить