2011-11-28 56 views
1

我有一個表定義爲varchar(15)的兩個字段。我想知道哪些記錄在這兩個領域具有相同的價值:火鳥查詢給出奇怪的結果

select * from table where field1 = field2 

這個返回一個空的結果,雖然我知道有匹配的記錄。我究竟做錯了什麼?

+0

什麼是Firebird版本和操作系統,表和所有索引的完整DDL是什麼? –

+1

另外請注意,在比較varchar和varchar空白*是*顯着(與將char或char與char char進行比較相反) –

+1

@Mark,或許我誤解了,但在將CHAR或VARCHAR與CHAR進行比較時會忽略尾隨空格或FB中的VARCHAR。見[這裏](http://www.firebirdfaq.org/faq237/)。也就是說,在這個例子中,尾隨空格是不重要的。 – pilcrow

回答

2

沒有更多信息(請參閱我的意見),問題可能是索引損壞。當您嘗試時會發生什麼:

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

使用此查詢將使Firebird忽略索引(如果有)並執行全表掃描。

如果這確實會返回結果,那麼您需要驗證並修復數據庫(使用gfix)並備份和恢復數據庫或刪除並重新創建索引。