2011-12-20 55 views
3

私はこのクエリを記述mysqlの完全一致

SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = 260; 

リターン

title   city 
--------------- ------ 
Butterfly world Mohali 

とするとき、私は

SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = '260abcxyz'; 

リターン

title   city 
--------------- ------ 
Butterfly world Mohali 
を書きます

第2のものが間違っているのを見てください。 IF IDが正確に一致するだけの値を取得したい...これを解決する方法。ご協力いただきありがとうございます。

+0

あなたは完全な行を表示できますか?およびテーブル定義。 – Nishant

答えて

2

を動作しませんよりも長すぎる場合の比較が正確に行われますので、あなたは文字列にidを変換する可能性があるため。

SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id LIKE '260abcxyz'; 

または代替あなたは暗黙の型変換を引き起こすことがLIKEを使用することができ、あなたは明示的にキャストを実行することができます

SELECT cd.title, cd.city FROM coupon_detail cd WHERE CAST(cd.id AS CHAR) = '260abcxyz'; 

しかし、すべてのあなたのIDが整数である場合、それは前にこれらの値をチェックするためにおそらくより適切ですデータベースを照会しようとします。 (照会しているIDが数字でない場合は、とにかく一致するものはありません)

+0

@MadanSapkota喜んで私は助けることができます:) –

2

これは、MySqlのタイプ変換のために発生しています。私のSQLは、あなたのクエリとAFAIKの整数として '260abcxyz'を扱います。なぜなら、最初のcharは数値に変換され、それは数値にキャストされ、260になります。あなたが 'abcxyz260'のように文字を書くと、比較が成功します。利用できるここ

詳細な説明:解決策としてType Conversion in MySql

:あなただけの数字が文字列と番号の組み合わせを比較して合格とされていない世話をする必要があります。

2

idINTの場合は、引用符を使用しないでください。 MySQLは、文字列を使ってINTを比較すると、開始から有効な初期整数だけを使用します。アイデアはINT列を比較するために、数字とaphabetsを混合することではありません

mysql> desc coupon_detail; 
+-------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+-------+--------------+------+-----+---------+-------+ 
| id | int(11)  | YES |  | NULL |  | 
| title | varchar(100) | YES |  | NULL |  | 
| city | varchar(100) | YES |  | NULL |  | 
+-------+--------------+------+-----+---------+-------+ 
3 rows in set (0.04 sec) 

mysql> SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = 'ff260'; 
Empty set, 1 warning (0.00 sec) 

mysql> SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = '260ff'; 
+-----------------+--------+ 
| title   | city | 
+-----------------+--------+ 
| Butterfly world | Mohali | 
+-----------------+--------+ 
1 row in set, 1 warning (0.00 sec) 

mysql> SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = 260; 
+-----------------+--------+ 
| title   | city | 
+-----------------+--------+ 
| Butterfly world | Mohali | 
+-----------------+--------+ 
1 row in set (0.00 sec) 

mysql> SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = 26011; 
Empty set (0.00 sec) 

はこれを参照してください。

  • ID列をVARCHARに変換すると考えられます。その場合、自動インクリメントは消えるかもしれません。
  • には、数値を持つ文字列だけを照会するアプリケーションロジックがあります。代わりのよう
0

使用=文字列が完全に一致するが、そのように
SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id LIKE '260abcxyz';

関連する問題