我已经将奇怪的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”运算符的工作方式。有人可以启发我吗?
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 = '8214, 8217, 4952, 8194, ...'
'8214, 8217, 4952, 8194, ...'将强制转换为number 8214,因此它将
'8214, 8217, 4952, 8194, ...'
8214
WHERE promo_detail_store_id = 8214