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

如何合并关联provas与含多外键horarios表的SQL查询?

合并考试表与时间表的SQL查询方案

没问题,我来帮你把这两个查询合并起来,顺便修正原查询里的一些小问题:

  • 两个原查询里都有表.id = 表.id这种完全冗余的条件,完全可以去掉
  • 第一个查询里的AND provas.id_horario JOIN horarios ON ;是语法错误,这种写法不符合SQL规范

合并后的完整查询(推荐显式JOIN写法,更清晰易维护)

SELECT
    provas.id,
    disciplinas.disciplina,
    disciplinas.grupo,
    salas.sala,
    dias.dia,
    meses.nome AS mes,
    horas.hora,
    minutos.minuto
FROM provas
JOIN disciplinas ON provas.id_disciplina = disciplinas.id
JOIN salas ON provas.id_sala = salas.id
JOIN horarios ON provas.id_horario = horarios.id
JOIN dias ON horarios.id_dia = dias.id
JOIN meses ON horarios.id_mes = meses.id
JOIN horas ON horarios.id_hora = horas.id
JOIN minutos ON horarios.id_minuto = minutos.id;

逻辑说明

  1. 从provas(考试表)出发,通过外键关联disciplinas(科目表)和salas(教室表),拿到考试对应的科目、分组和教室信息
  2. 通过provas.id_horario关联到horarios(时间表),再从时间表分别关联到dias(日期表)、meses(月份表)、horas(小时表)、minutos(分钟表),获取完整的时间维度数据
  3. 给meses.nome起别名mes,让结果集的字段名更直观

简洁优化版(使用表别名缩短代码)

如果想让代码更简洁,也可以给每个表设置别名:

SELECT
    p.id,
    d.disciplina,
    d.grupo,
    s.sala,
    di.dia,
    m.nome AS mes,
    h.hora,
    mi.minuto
FROM provas p
JOIN disciplinas d ON p.id_disciplina = d.id
JOIN salas s ON p.id_sala = s.id
JOIN horarios ho ON p.id_horario = ho.id
JOIN dias di ON ho.id_dia = di.id
JOIN meses m ON ho.id_mes = m.id
JOIN horas h ON ho.id_hora = h.id
JOIN minutos mi ON ho.id_minuto = mi.id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:38:01