2011-08-10 12 views
2

これは私が修正することができますか、または誰かが明らかな間違いを指摘する可能性があります。私はちょうどあなたたちは狂気を見たいと思って長いリストのためのなぜ私のSQLクエリがお互いに一致しないのですか?

SELECT HIDEORSHOW FROM tblProspects WHERE PROSPECT_ID = 1261484;

HIDEORSHOW 
1 

SELECT PROSPECT_ID FROM tblProspects WHERE HIDEORSHOW = 1;

PROSPECT_ID 
196248 
199004 
204190 
204338 
210918 
211932 
213332 
214186 
216980 
218254 
222420 
223578 
223824 
224429 
224390 
224672 
224714 
227031 
227481 
228363 
230040 
238168 
239230 
240790 
241409 
243827 
244553 
245785 
247947 
248349 
250426 
250640 
252399 
252555 
253610 
253949 
254641 
255109 

申し訳ありません:

は、私は2つのクエリを持っています。これが起こる理由はありますか?このHIDEORSHOWの値を持ち、リストには表示されない、私が知っている別の見通しがある、1257506です。

+2

idの> 999999は表示されません。 –

+0

HIDEORSHOWの列の種類は何ですか?それは数字ではなく文字列であり、実際には空白を含んでいる可能性があります。列の種類を教えてください。 – nycynik

+0

HIDEORSHOWはENUM( '0'、 '1')として定義されています。文字列 '1'を使用するようにSQL文を変更すると正しい結果が得られます。私は1と1を後で使うことができる理由の謎を解き明かさなければならない。 – David

答えて

2

私は、HIDEORSHOWフィールドがある種の文字列であり、いくつかの値に先行または後続のスペースがあることをお勧めします。これをテストするには

This is true, due to implicit CASTing:  '1' = 1  (Becomes : '1' = '1') 
This is false, even with implicit CASTing: ' 1' = 1  (Becomes : ' 1' = '1') 


、このクエリを試してみてください(または、SQLのバージョンで同等です)...

SELECT PROSPECT_ID FROM tblProspects WHERE CAST(HIDEORSHOW AS INT) = 1; 

これはではなくstring => intになるようにキャストを強制します他の方法で。


それとも、このテストを試みることができる...

SELECT '<' + HIDEORSHOW + '>', LEN(HIDEORSHOW) FROM tblProspects WHERE PROSPECT_ID = 1261484; 

あなたは、そのフィールドに正確な値により可視性を持っています。

+0

おそらくDBMSに依存します。 SQL Server 2008 R2では、次の2行が返されます。 'SELECT * FROM(SELECT '1' UNION ALL SELECT '1')s(f)WHERE f = 1'つまり、文字列は暗黙的に数値に変換されます。 。 –

関連する問題