3

私はクエリを実行していた 2 つの異なる方法に奇妙な MySQL の問題を突き止めました。すべてを煮詰めると、この方法でより多くの結果が返されます。

SELECT DISTINCT <stuff> FROM <tables> 
WHERE promo_detail_store_id in (8214, 8217, 4952, 8194, ...)

この WHERE 句の変更により、これらの結果のサブセットが生成されます。

WHERE promo_detail_store_id in ('8214, 8217, 4952, 8194, ...')

(promo_detail_store_id は、MyISAM テーブルで BIGINT として定義されます。)

もともと、その store_ids のリストはずっと長かったので、文字列の長さに奇妙な制限があるのではないかと考えて、どんどん短くしていきました。しかし、いいえ、非常に小さな文字列/リストにも当てはまります。明らかに、型強制やおそらく「in」演算子の動作に関連して、舞台裏で何かが起こっています。誰かが私を啓発できますか?

4

2 に答える 2

10

WHERE promo_detail_store_id in (8214, 8217, 4952, 8194, ...)

意味

WHERE promo_detail_store_id = 8214 
OR  promo_detail_store_id = 8217
OR promo_detail_store_id = 4952 
OR promo_detail_store_id = 8194
OR ... 

WHERE promo_detail_store_id in ('8214, 8217, 4952, 8194, ...')

意味

 WHERE promo_detail_store_id = '8214, 8217, 4952, 8194, ...'

'8214, 8217, 4952, 8194, ...'になる番号にキャストされる8214ので、

WHERE promo_detail_store_id = 8214
于 2012-09-22T16:00:47.847 に答える
3

2 番目の条件は実質的に と同等です。これは、aとWHERE promo_detail_store_id IN (8214)a を比較していて、テキストが整数値にキャストされ、数値以外の最初の文字から文字列の末尾までがすべて無視されるためです。BIGINTTEXT

于 2012-09-22T16:01:28.470 に答える