我在执行查询的两种不同方式中发现了一个奇怪的 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 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
关于MySQL 查询使用 'in' 运算符 : why different results w/quotes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12545331/