如何合并MySQL查询以复用首个查询的companyId结果?
合并MySQL查询的两种方法
方法一:子查询嵌套
直接将第一个查询获取的companyId集合作为子查询,替换原语句中固定的123,同时关联companies表获取公司名称:
SELECT gap.companies.name, reports.creationdate, reports.meetingdate FROM reports INNER JOIN report_companies ON reports.reportId = report_companies.reportId INNER JOIN gap.companies ON report_companies.companyId = gap.companies.companyId WHERE report_companies.companyId IN ( SELECT gap.user_companies.companyId FROM gap.user_companies INNER JOIN gap.users ON gap.user_companies.userId = gap.users.userId WHERE gap.users.username = 'tester' ) ORDER BY reports.creationdate;
说明
- 内层子查询负责筛选出用户
tester关联的所有companyId - 外层通过
IN条件匹配这些公司ID,同时连接companies表拿到对应的公司名称 - 最终返回
name、creationdate、meetingdate三个字段的结果集
方法二:多表全连接
通过一次性连接所有相关表,直接关联出所需数据,逻辑更直观:
SELECT gap.companies.name, reports.creationdate, reports.meetingdate FROM gap.users INNER JOIN gap.user_companies ON gap.users.userId = gap.user_companies.userId INNER JOIN gap.companies ON gap.user_companies.companyId = gap.companies.companyId INNER JOIN report_companies ON gap.companies.companyId = report_companies.companyId INNER JOIN reports ON report_companies.reportId = reports.reportId WHERE gap.users.username = 'tester' ORDER BY reports.creationdate;
说明
- 从
users表出发,依次关联user_companies、companies、report_companies、reports表,建立完整的数据关联链 - 通过
WHERE条件筛选指定用户,直接获取该用户关联公司的所有报告日期数据 - 这种方式避免了子查询嵌套,部分场景下性能更优,也便于后续维护
内容的提问来源于stack exchange,提问作者user9847788
相关产品推荐
相关产品推荐

