You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:25:19