MySQL IN子查询查不到结果,NOT IN可以查到结果

35 阅读1分钟

在写SQL中遇见一个奇怪的问题

对于

select DISTINCT commodity_id from (select * from t_commodity_order order by t_commodity_order.update_time desc) AS D

能够查到结果:
image.png

select A.*
from t_commodity_info A where A.commodity_id in (
    select DISTINCT commodity_id from (select * from t_commodity_order order by t_commodity_order.update_time desc) AS D
    );

查询结果为空
不知道为啥,NOT IN能够查到结果,因为双重否定为肯定所以可以通过两层not in实现 in
后来经过同事排查发现,子查询所用比较字段在两表中使用不同字符集,导致查不出数据,使用相同数据集之后查询成功,但不知道为什么NOT IN 在字符集不同时也能查询的原因