2011-11-28 20 views
1

私は2つのフィールドがvarchar(15)として定義されたテーブルを持っています。私は両方のフィールドに同じ値を持つレコードを知りたい:奇妙な結果を与えるFirebirdクエリ

select * from table where field1 = field2 

私が一致するレコードがある知っているけれども、これはヌル結果を返します。私は間違って何をしていますか?

+0

どのFirebirdのバージョンとOSで、テーブルとすべてのインデックスの完全なDDLは何ですか? –

+1

また、varcharとvarcharの空白を比較すると*が重要であることに注意してください。(charとcharまたはvarcharをcharと比較するのとは対照的に) –

+1

@マーク、おそらく私は誤解しますが、CHARまたはVARCHARをCHARまたはFBのVARCHAR [here](http://www.firebirdfaq.org/faq237/)を参照してください。つまり、この例では末尾の空白は_重要ではありません。 – pilcrow

答えて

2

これ以上の情報がありません(私のコメント参照)。この問題はインデックスが壊れている可能性があります。

このクエリを使用すると、Firebirdがインデックスを無視してフルテーブルスキャンを実行します。

結果が返された場合は、gfixを使用してデータベースの検証と修復を行い、データベースのバックアップと復元、またはインデックスの削除と再作成が必要になります。