不存在不起作用

时间:2016-03-24 20:52:44

标签: oracle inner-join not-exists

一点解释:

Ids是建立学生与学科之间关系的表格。

Matrix是包含所有课程所有课程的表格。

所以,我试图让那些仍然 与学生联系起来的学科,换句话说,我希望得到所有剩余的学科。

这是我的代码:

SELECT d.cod_disc, cod_course
FROM students s
JOIN ids i ON s.mat_alu = i.mat_alu
JOIN disciplines d ON i.cod_disc = d.cod_disc
WHERE s.mat_alu = 78839
      AND NOT EXISTS (SELECT 1
                        FROM matrix m
                        WHERE m.cod_disc = d.cod_disc);

我怎样才能让它发挥作用?它什么也没有回来。

修改

第一次查询: - 主SELECT

COD_DISC     COD_COURSE
--------     ----------
335          13
3824         13
3831         13
3835         13
6235         13
6237         13

SELECT cod_disc, cod_course * FROM matrix WHERE cod_course = 13 - 13是该学生的课程。

COD_DISC     COD_COURSE
--------     ----------
3824         13
3825         13
3826         13
3827         13
3828         13
3829         13
3830         13
3831         13
3832         13
3833         13
3834         13
3835         13

所以,在我的查询中,我想要返回几乎所有的值(3824,3831和3835),因为学生已经被链接了。

1 个答案:

答案 0 :(得分:0)

您可能需要在内部查询中添加另一个条件:

SELECT d.cod_disc, cod_course
FROM students s
JOIN ids i ON s.mat_alu = i.mat_alu
JOIN disciplines d ON i.cod_disc = d.cod_disc
WHERE s.mat_alu = 78839
      AND NOT EXISTS (SELECT 1
                        FROM matrix m
                        WHERE m.cod_disc = d.cod_disc
                        and m.cod_course = d.cod_course);

否则,它将匹配任何其他具有该cod_disc的cod_course。