问题场景:笛卡尔积导致的查询结果偏差
原始查询语句:
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"));
-- 索引列需要放在前边