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
相关产品推荐
相关产品推荐

