带双IN列表参数的MySQL查询如何匹配指定ID/rID配对行
固定ID-rID配对筛选的MySQL查询写法
原有查询用ID IN (...) AND rID IN (...)的逻辑,本质是取两个独立集合的交叉结果,不绑定字段配对关系,会筛出跨组合的无效行。要精准匹配指定配对,必须把ID和rID的绑定关系写进筛选条件,可直接用以下单条SQL实现:
推荐写法(MySQL全版本支持,语法简洁)
通过行构造器做联合元组匹配,直接和目标配对列表比对,从语法层面避免错筛:
SELECT * FROM myTable WHERE (ID, rID) IN ( (10, 1002), (14, 1003), (28, 1001), (40, 1002) );
这种写法的执行效率和普通等值查询一致,是匹配多组固定配对的最优方案。
兼容版写法(适配特殊限制环境)
如果环境不支持行构造器的IN语法,可通过逐组等值判断拼接实现,结果完全等价:
SELECT * FROM myTable WHERE (ID = 10 AND rID = 1002) OR (ID = 14 AND rID = 1003) OR (ID = 28 AND rID = 1001) OR (ID = 40 AND rID = 1002);
关键提醒
- 禁止将ID、rID拆成两个独立的IN条件做交叉筛选,一旦拆分就会丢失配对绑定关系,必然出现冗余结果
- 以上两种写法都不需要额外嵌套子查询、临时表,完全满足单条查询的要求
内容的提问来源于stack exchange,提问作者rolinger
相关产品推荐
相关产品推荐

