一尘不染

使用'in'运算符的MySQL查询:为什么用引号引起不同的结果?

sql

我已经将奇怪的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”运算符的工作方式。有人可以启发我吗?


阅读 237

收藏
2021-03-08

共1个答案

一尘不染

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, ...'将强制转换为number 8214,因此它将

WHERE promo_detail_store_id = 8214
2021-03-08