【问题标题】:Not Exists isn't working不存在不起作用
【发布时间】:2016-07-12 14:40:08
【问题描述】:

一点解释:

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 是该学生的 course.id。

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),因为学生已经被链接。

【问题讨论】:

  • 相信我。它以应有的方式工作。显然,来自学科的每个cod_discmatrix 中至少有 1 个匹配行。当然,鉴于您对mat_alu 的附加条件。
  • @ConsiderMe 我添加了更多信息,你能看一下吗?

标签: oracle inner-join not-exists


【解决方案1】:

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

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多