MYSQL中使用IN()踩坑记录

问题场景:笛卡尔积导致的查询结果偏差
原始查询语句:

SELECT * FROM trade WHERE user_id IN (1, 2) AND user_name IN ("a1", "b2");

由于两个独立IN条件的组合,结果集产生笛卡尔积,返回[1,"a1"]、[1,"b2"]、[2,"a1"]、[2,"b2"]共 4 条记录。
预期查询结果仅匹配特定组合[1,"a1"]和[2,"b2"],共 2 条记录。

当使用AND连接两个独立IN条件时,SQL 会将条件视为 “user_id 属于集合 A 且 user_name 属于集合 B”,即全组合匹配。
若需精确匹配指定的(user_id, user_name)组合,需使用组合条件语法。

SELECT * FROM trade WHERE (user_id, user_name) IN ((1, "a1"), (2, "b2"));
-- 索引列需要放在前边
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容