我在数据库中有一个查询,我正在为我的大学项目工作,我有 3 个不同的研究项目,我想找到所有参与课程的教授的名字,这些教授出现在每个不同的项目类型中.相反,我得到的结果是在所有项目中工作的所有教授的名字,而不仅仅是交叉结果。季节性节目表和外语节目表都在扩展节目实体 (ISA),所有提到的表内部都有一些基本数据来解决我的功能,所以我可以看看它是否有效。
我的代码如下:
CREATE OR REPLACE FUNCTION public.fn_question_3_9()
RETURNS TABLE(name character varying, surname character varying)
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
ROWS 1000
AS $BODY$
BEGIN
RETURN QUERY
SELECT DISTINCT pr.name, pr.surname
FROM "Person" pr
JOIN "Professor" prof USING (amka)
JOIN "Teaches" te USING (amka)
JOIN "CourseRun" cour USING (serial_number)
JOIN "Course" cr ON (cour.course_code = cr.course_code)
JOIN "ProgramOffersCourse" pof ON (cr.course_code = pof."CourseCode")
JOIN "Program" pro ON (pof."ProgramID" = pro."ProgramID")
WHERE pro."ProgramID" = (SELECT "ProgramID" FROM "SeasonalProgram")
AND pro."ProgramID" =(SELECT "ProgramID" FROM "ForeignLanguageProgram")
AND pro."ProgramID" IS NOT NULL;
END;
$BODY$;
我尝试使用您在代码中看到的条件找到它们,这显然是错误的,我也尝试使用 UNION 找到它们,但我认为这也不正确。我期望它能得到教授的名字,这些教授的课程在所有研究项目中都有。