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

MySQL多表关联查询问题:提取指定师生的课程记录

解决特定教师课程中特定参与者的记录查询问题

需求:提取由Andrea Bianchi教授执教的数学课(docenti表materia字段为'Matematica')且有Mario Rossi(来自partecipanti表)参与的所有相关记录。

原查询问题分析

最初的查询返回空结果,核心问题是错误地将persona_fisica表同时关联到参与者和教师身份,WHERE条件要求同一条persona_fisica记录同时匹配Mario Rossi和Andrea Bianchi,这在逻辑上不可能成立,因此无符合条件的数据返回:

SELECT presenze.*, partecipanti.id, partecipanti.id_persona_fisica, persona_fisica.id, persona_fisica.nome, persona_fisica.cognome, docenti.id_persona_fisica, docenti.materia 
FROM presenze
JOIN partecipanti ON presenze.id_partecipante = partecipanti.id 
JOIN persona_fisica ON partecipanti.id_persona_fisica = persona_fisica.id
JOIN docenti ON docenti.id_persona_fisica = persona_fisica.id 
WHERE persona_fisica.nome = 'Mario' AND persona_fisica.cognome = 'Rossi' 
AND persona_fisica.nome = 'Andrea' AND persona_fisica.cognome = 'Bianchi' 
AND docenti.materia = 'Matematica';

正确解法:用表别名区分同一表的不同关联

通过给persona_fisica表设置两个别名(pf1、pf2),分别关联参与者和教师的身份信息,就能同时筛选出符合条件的两类人员,得到正确结果:

SELECT 
    presenze.*, 
    partecipanti.id, 
    partecipanti.id_persona_fisica, 
    pf1.id, 
    pf1.nome, 
    pf1.cognome, 
    docenti.id_persona_fisica, 
    docenti.materia,
    pf2.id, 
    pf2.nome, 
    pf2.cognome
FROM presenze
JOIN partecipanti 
ON presenze.id_partecipante = partecipanti.id 
JOIN persona_fisica pf1
ON partecipanti.id_persona_fisica = pf1.id
JOIN persona_fisica pf2
ON docenti.id_persona_fisica = pf2.id
WHERE pf1.nome = 'Mario' AND pf1.cognome = 'Rossi' 
AND pf2.nome = 'Andrea' AND pf2.cognome = 'Bianchi' 
AND docenti.materia = 'Matematica';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:35:26