Tengo esta consulta para intentar buscar el curso que cumpla 3 requisitos.
select course.id, course.title, course.number, string_agg(requirement.description,'; ' order by requirement.description) from course join ( select course.id, course.title, course.number from requirement join course_requirement on (requirement.id=course_requirement.requirement) join course on (course.id=course_requirement.course) where requirement.description='Human Behavior' ) as c1 on (c1.id=course.id) join ( select course.id, course.title, course.number from requirement join course_requirement on (requirement.id=course_requirement.requirement) join course on (course.id=course_requirement.course) where requirement.description='Intercultural' ) as c2 on (c1.id=c2.id) join ( select course.id, course.title, course.number from requirement join course_requirement on (requirement.id=course_requirement.requirement) join course on (course.id=course_requirement.course) where requirement.description='Religion' ) as c3 on (c1.id=c3.id) group by course.id, course.title, course.number;Sin embargo, recibo este mensaje: ERROR: falta la entrada de la cláusula FROM para la tabla "requisito" LÍNEA 1: ...curso.id, curso.título, curso.número,cadena_agg(requisito... ¿Puede decirme dónde se equivoco en la consulta?
¡Muchas gracias!
No veo el punto de las tres subconsultas unidas, que difieren solo en la descripción del requisito en la cláusula WHERE . En su lugar, puede intentar una única consulta que utilice WHERE IN para capturar las tres descripciones que desea en su conjunto de resultados. Esto también soluciona el problema que tenía con string_agg() , donde intentaba agregar algo de una subconsulta no accesible en la consulta externa.
Pruebe la siguiente consulta:
select t1.id, t1.title, t1.number, string_agg(t3.description, '; ' order by t3.description) from course t1 inner join course_requirement t2 on t1.id = t2.course inner join requirement t3 on t2.requirement = t3.id where t3.description in ('Human Behavior', 'Intercultural', 'Religion') group by t1.id, t1.title, t1.number;