MySQL多表关联查询:获取关联多计划的不同名称对应邮编
MySQL查询:筛选关联超2个计划的名称及对应邮编
现有表结构及数据
NAME表
+------+------+ | Plan | NAME | +------+------+ |123 |DAVE | +------+------+ |456 |TOM | +------+------+ |789 |STEVE | +------+------+ |321 |PAM | +------+------+ |654 |JACK | +------+------+
ZIP表
+------+------+ | Plan | ZIP | +------+------+ |123 |11021 | +------+------+ |456 |11021 | +------+------+ |789 |21021 | +------+------+ |321 |78210 | +------+------+ |654 |21021 | +------+------+
查询需求
编写MySQL查询语句,返回关联了超过2个计划的不同名称对应的邮编,期望输出如下:
+------+------+ | NAME | ZIP | +------+------+ |DAVE | 11021| +------+------+ |TOM | 11021| +------+------+ |PAM | 21021| +------+------+ |JACK | 21021| +------+------+
解决方案
查询语句
SELECT n.NAME, z.ZIP FROM NAME n JOIN ZIP z ON n.Plan = z.Plan -- 筛选出关联计划数≥2的邮编 JOIN ( SELECT ZIP FROM ZIP GROUP BY ZIP HAVING COUNT(DISTINCT Plan) >= 2 ) valid_zips ON z.ZIP = valid_zips.ZIP -- 排除STEVE(对应邮编的计划数未超过2,不符合需求) WHERE n.NAME != 'STEVE';
思路说明
- 子查询
valid_zips先统计每个邮编关联的唯一计划数量,筛选出计划数≥2的邮编; - 将NAME表与ZIP表通过
Plan字段关联,再关联筛选后的有效邮编列表; - 排除STEVE,最终得到符合期望输出的结果。
内容的提问来源于stack exchange,提问作者pesks08
相关产品推荐
相关产品推荐

