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

MySQL多表关联查询需求:获取inscripciones及关联的Eventos与Instituciones信息

解决方案

嘿,这需求我熟,给你写个精准的SQL查询就行。先理清楚咱们的表关联逻辑:inscripciones(报名表)和Eventos(活动表)是一对多,每个报名对应一个活动;Eventos和Instituciones(机构表)是多对多,靠中间表evento_institucion关联,一个活动可以属于多个机构。

下面是满足需求的SQL语句:

SELECT
    -- 选中inscripciones表的所有字段
    i.*,
    -- 获取对应活动的名称
    e.name AS evento_nombre,
    -- 把关联的机构名合并成逗号分隔的列表,处理无关联的情况
    IFNULL(GROUP_CONCAT(DISTINCT inst.name SEPARATOR ', '), '无关联机构') AS instituciones_lista
FROM
    inscripciones i
-- 左连接活动表,确保即使报名没关联活动(理论上不该有,但保险起见)也能显示
LEFT JOIN Eventos e ON i.evento_id = e.id
-- 左连接中间表,关联活动和机构
LEFT JOIN evento_institucion ei ON e.id = ei.evento_id
-- 左连接机构表
LEFT JOIN Instituciones inst ON ei.institucion_id = inst.id
-- 按报名记录分组,确保每条报名只显示一次,机构名合并
GROUP BY
    i.id; -- 假设inscripciones的主键是id,用主键分组更可靠

关键细节说明:

  • LEFT JOIN的使用:用左连接而非内连接,是为了保证即使某个报名没有关联活动(业务上可能不允许,但避免数据丢失),或者某个活动没有关联任何机构,这条报名记录依然会被查询出来,不会被过滤掉。
  • GROUP_CONCAT的作用:把同一个活动关联的多个机构名合并成一个逗号分隔的字符串,方便直接查看机构列表;加上DISTINCT可以避免同一个活动重复关联同一机构时,机构名重复显示。
  • IFNULL处理空值:当活动没有任何关联机构时,会显示无关联机构的友好提示,而不是默认的NULL值。
  • 分组逻辑:按inscripciones的主键id分组,确保每条报名记录唯一,不会因为关联多个机构而被拆分成多条重复的报名数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:10:37