sql中的intersect

问题是:想要求得同时选修了01和02课程的学生的学号和名字? 我创建的代码: (select student.s_id,sn,score.c_id from student,score where student.s_id=score.s_id and score.c_id=01) intersect (select student.s_id,sn,score.c_id from student,score where student.s_id=score.s_id and score.c_id=02); 结果:上一条执行可以结果数据有三条,下一条执行结果也有数据三条,我看了这两个结果有一条是都有的,可当他们全部一起执行就没有结果了 求大佬指教,先谢谢了

根据你提供的代码和问题描述,我猜测你的问题可能出在两个子查询的相交部分为空的情况。也就是说,可能不存在同时选修了01和02课程的学生。

你可以尝试在两个子查询的结果中添加打印语句,以确认这个猜测是否正确。例如,你可以在每个子查询中添加以下语句:

select 'query 1' as query_name, student.s_id, sn, score.c_id
from student, score
where student.s_id = score.s_id and score.c_id = 01;

select 'query 2' as query_name, student.s_id, sn, score.c_id
from student, score
where student.s_id = score.s_id and score.c_id = 02;

这样可以帮助你看到每个子查询返回的数据,以及是否存在交集。

如果确认是相交部分为空引起的问题,你可以尝试调整查询条件,或者使用其他 SQL 操作 (如 LEFT JOIN 和 EXISTS) 重写查询,以确保可以正确的输出结果。