MySQL 的表至少是满足_mysql – 选择给定的先决条件列表完全满足的课程

我正在尝试编写一个SQL查询,该查询将返回一个人符合条件的课程列表,给出已完成主题的列表(用作先决条件).

我有我的数据库.

Prerequisite:

+---------------+---------------+

| Id | Name | (Junction table)

|---------------|---------------| CoursePrerequisites:

| 1 | Maths | +---------------+---------------+

| 2 | English | | Course_FK | Prerequisite_FK

| 3 | Art | |---------------|---------------|

| 4 | Physics | | 1 | 1 |

| 5 | Psychology | | 1 | 2 |

+-------------------------------+ | 2 | 3 |

| 2 | 5 |

Course: | 5 | 4 |

+---------------+---------------+ +---------------v---------------+

| Id | Name |

|---------------|---------------|

| 1 | Course1 |

| 2 | Course2 |

| 3 | Course3 |

| 4 | Course4 |

| 5 | Course5 |

+---------------v---------------+

我一直在尝试一个看起来像这样的查询:

SELECT DISTINCT C.*

FROM Course C

INNER JOIN JNCT_Course_Prerequisites cp

ON C.Id = cp.Course_FK

WHERE cp.Prerequisite_FK IN (SELECT Prerequisites.Id FROM Prerequisites Where Name = 'Art' AND Name = etc etc)

然而,这将返回任何艺术是先决条件的课程,而不仅仅是给定的先决条件列表完全满足的课程.例如.它将返回课程2,只有艺术作为学生的先决条件,即使课程也需要心理学.

我对SQL很新,所以如果我的表格布局有问题,或者这是一个看似简单的问题,请原谅.我一直在尽我所能地搜索,但只能找到解决这个问题的反面的解决方案.

看来我需要对集​​合做一些区别:

>构建一组具有先决条件的课程(针对每个先决条件?)

>构建一组没有先决条件的课程

>执行集合操作的差异:选择第一组中的全部存在而不存在第二组

看起来很简单,但我现在对联结表以及如何在许多先决条件中处理这个问题感到困惑.

我希望返回至少完全满足给定先决条件列表的行,而不是包含至少一个先决条件的行.

例如,如果给出先决条件“艺术”,“英语”,“心理学”,则应返回的唯一行是Course2(先决条件超过满足).

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值