如何在MySQL中通过单条查询将一个语句返回的多个ID传入另一个查询的IN子句
用单条MySQL查询完成需求的方案
当然可以!完全不需要分开执行两次查询,MySQL提供了几种简洁的方式来实现这个需求,我给你列两种最常用的:
1. 使用子查询(最直观的方式)
直接把获取ID的查询作为子查询放到IN()函数里就行,写法和你原来的思路完全对应:
SELECT `somecol` FROM `anothertable` WHERE `parent` IN (SELECT `id` FROM `tablename`)
MySQL会先执行括号内的子查询,拿到tablename里的所有ID,再用这些ID去过滤anothertable中parent匹配的行,最终返回你需要的somecol数据。
2. 使用JOIN关联查询(性能更优的选择)
如果你的数据量比较大,JOIN通常比子查询的性能更好,而且逻辑也很清晰:
SELECT DISTINCT `anothertable`.`somecol` FROM `anothertable` JOIN `tablename` ON `anothertable`.`parent` = `tablename`.`id`
这里用JOIN直接关联两个表,通过parent和id的对应关系筛选数据。加DISTINCT是为了避免因为关联后出现重复行,导致somecol返回重复值——如果你的tablename里的ID都是唯一的,其实可以去掉DISTINCT,不过加上更稳妥。
两种方式都能达到和两次查询一样的效果,你可以根据自己的场景选择:子查询更直观,和你原来的思路一致;JOIN在大数据量下性能表现更好。
内容的提问来源于stack exchange,提问作者Victor Rose
相关产品推荐
相关产品推荐

