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

MySQL多表单查询需求:已知协调员user_id查所属项目关联学校

单条SQL实现需求方案

根据你的数据表结构和需求,我们可以通过表关联(JOIN)或者嵌套子查询将三步查询合并为单条SQL,直接获取目标学校数据。

方案1:使用JOIN串联关联表

这种方式通过多次关联coordinator表串联关系,逻辑清晰,在有索引的场景下性能更优:

SELECT DISTINCT s.school_id, s.school_name, s.school_phone, s.school_email
FROM coordinator c1
JOIN coordinator c2 ON c1.project_id = c2.project_id
JOIN school s ON c2.coordinator_id = s.coordinator_id
WHERE c1.user_id = 2;

逻辑说明:

  1. 通过c1表筛选出指定user_id(示例为2)对应的所有项目project_id
  2. 通过c2表关联这些项目,获取该项目下的所有协调员coordinator_id
  3. 关联school表,得到这些协调员负责的所有学校
  4. 用DISTINCT避免重复的学校记录(如果同一学校被多个同项目协调员关联)

方案2:使用嵌套子查询

如果更习惯子查询的写法,可以用多层IN子查询实现:

SELECT DISTINCT school_id, school_name, school_phone, school_email
FROM school
WHERE coordinator_id IN (
    SELECT coordinator_id
    FROM coordinator
    WHERE project_id IN (
        SELECT project_id
        FROM coordinator
        WHERE user_id = 2
    )
);

逻辑说明:

从内到外依次执行:

  1. 最内层子查询:获取指定user_id参与的所有项目ID
  2. 中间层子查询:获取这些项目下的所有协调员ID
  3. 最外层查询:获取这些协调员关联的所有学校

注意事项

  • 如果只需要school_id,可以去掉其他字段,和你原来的第三步查询结果一致
  • 建议给以下字段添加索引,提升查询效率:
    • coordinator.user_id
    • coordinator.project_id
    • school.coordinator_id
  • 如果你的业务场景中不会出现同一学校被多个同项目协调员关联的情况,可以去掉DISTINCT

内容的提问来源于stack exchange,提问作者ugsgknt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:15:31