2011-11-28 3 views
1

У меня есть таблица с двумя полями, определенными как varchar (15). Я хочу знать, какие записи имеют одинаковое значение в обоих полях:Запрос Firebird дает странные результаты

select * from table where field1 = field2 

это возвращает нулевой результат, хотя я знаю, что есть записи, которые соответствуют. Что я делаю не так?

+0

Какая версия Firebird и ОС, какой полный DDL таблицы и все индексы? –

+1

Также имейте в виду, что при сравнении varchar с varchar whitespace * is * значительно (вопреки сравнению char с char или varchar с char) –

+1

@Mark, возможно, я неправильно понимаю, но конечные пробелы игнорируются при сравнении CHAR или VARCHAR с CHAR или VARCHAR в FB. См. [Здесь] (http://www.firebirdfaq.org/faq237/). То есть, конечный пробел в этом примере не значителен. – pilcrow

ответ

2

Без дополнительной информации (см. Мои комментарии) проблема может быть поврежденным индексом. Что происходит, когда вы пытаетесь:

select * from table where field1 || '' = field2 || '' 

Используя этот запрос сделает Firebird игнорировать индекс (если таковые имеются) и сделать полное сканирование таблицы.

Если это возвращает результат, вы захотите проверить и, возможно, отремонтировать базу данных (используя gfix) и либо создать резервную копию, либо восстановить базу данных, либо сбросить и воссоздать индекс.

Смежные вопросы