MySQL 5.7:如何查询出现在3张表中任意2张及以上的ID?
MySQL 5.7 查询在至少2张表中出现的ID
可以通过合并所有表的ID并统计出现次数的方式实现,核心思路是用UNION ALL把三张表的ID集合整合(保留重复项),再分组统计每个ID的出现频次,最后筛选出频次≥2的ID。
假设你的三张表分别是table_a、table_b、table_c,都包含id字段,执行以下SQL即可:
SELECT id FROM ( SELECT id FROM table_a UNION ALL SELECT id FROM table_b UNION ALL SELECT id FROM table_c ) AS combined_ids GROUP BY id HAVING COUNT(*) >= 2;
关键细节说明:
- 使用
UNION ALL而非UNION:UNION会自动去重,无法统计ID出现的实际次数;UNION ALL保留所有重复的ID,确保统计准确。 - 处理NULL值(可选):如果你的
id字段允许NULL,而你想排除这些NULL值,可以在每个子查询中添加过滤条件:SELECT id FROM ( SELECT id FROM table_a WHERE id IS NOT NULL UNION ALL SELECT id FROM table_b WHERE id IS NOT NULL UNION ALL SELECT id FROM table_c WHERE id IS NOT NULL ) AS combined_ids GROUP BY id HAVING COUNT(*) >= 2; - 性能优化:如果三张表的数据量较大,确保每张表的
id字段都创建了索引,这样UNION ALL的查询效率会更高。
内容的提问来源于stack exchange,提问作者Duncan
相关产品推荐
相关产品推荐

