Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 复杂SELECTSQL语句_Mysql_Sql - Fatal编程技术网

Mysql 复杂SELECTSQL语句

Mysql 复杂SELECTSQL语句,mysql,sql,Mysql,Sql,有一些课程。班上的学生学习科目。我将这些表格连接到每个表格上,所以:对于一个班级,会有很多科目;对于一个班级,会有很多课程科目M M类。因此,我的数据库中有3个表来创建这些关系: 主题: +----+------+ + id + name + +----+------+ 类别: +----+-------+------+ + id + digit + char + +----+-------+------+ ClassVsTeacher(连接这两个表): 教师课堂(对于第二个问题很重要,用于

有一些课程。班上的学生学习科目。我将这些表格连接到每个表格上,所以:对于一个班级,会有很多科目;对于一个班级,会有很多课程<代码>科目M M类。因此,我的数据库中有3个表来创建这些关系:

主题:

+----+------+
+ id + name +
+----+------+
类别:

+----+-------+------+
+ id + digit + char +
+----+-------+------+
ClassVsTeacher(连接这两个表):

教师课堂(对于第二个问题很重要,用于连接课堂和教师):

1) 我说得对吗

2) 我现在正在为一门课增加一个主题我想在下拉列表中显示至少有一名教师的所有科目,但当前班级已连接的科目除外。

我知道如何显示至少有一名教师的所有科目:

select 
    `s`.`id`, `s`.`name`
from `Subject` as `s`
where 
    `s`.`id` in (select `subject_id` from `TeacherVsSubject`)

它运行良好,但我不明白如何显示这一点,除了已经连接到当前课程的主题。这是我的问题。

我认为你的思路是对的

我会使用如下表名:

SubjectsPerClass

TeachersPerClass

然后我将创建一个join语句并将其保存为视图,然后从现在开始查询该视图

SELECT * 
FROM `SubjectsPerClass` sc
JOIN `Subject` s
   ON `s`.`id` = `sc`.`subject_id`
JOIN `Class` c
   ON `c`.`id` = `sc`.`class_id`
然后,如果您使用的是phpMyAdmin,只需单击末尾的
Create View
。我通常将视图命名为
ClassesInfo
(我对视图使用
Info
)。您可以选择所需的字段

那么将来你可以做什么

SELECT *
FROM `ClassesInfo`
WHERE (conditions here)
解决方案:

select * from Subject
where id in (select subject_id from TeacherVsSubject)
and id not in (select subject_id from ClassVsSubject where class_id = XX)

如果在
TeacherVsSubject
中存在具有相同
id
的行,并且在该类=
XX
的ClassVsSubject中没有具有相同
id
的行,则我们选择所有受试者
XX
=
id
,我将为其添加科目。

一个科目是否只由一名教师教授?或者很多老师可以教一门课?注意,为了可读性,你不需要在MySQL中的每个名字上打勾,只需要那些也是关键字的名字。我想你是指
ClassVsSubject
?@Prodikl,当然
ClassVsSubject
@戴,好的,谢谢你@哈什布朗,很多老师都能教一门课。现在我有了结果,它显示了所有课程的所有科目。这是我问题的答案吗?问题是:我想在下拉列表中显示至少有一名教师的所有科目,除了当前班级已经连接的科目。怎么做。我知道如何找到有老师的科目,但我不知道如何筛选出已经与课堂相关的科目。这就是问题所在。无论如何,谢谢你的回答!在创建
视图后
,您可以执行
从ClassesInfo中选择*,其中教师id!=null和class_id!=12
。当然,请将当前的类id放在该参数中。我英语很差?:(我正在管理班级的科目。例如,用户现在在“课堂简介”页面上。他按“添加主题”和出现了带有主题的下拉列表。关于如何获取此列表的问题。将建议用户使用的科目是(此列表中将包含哪些科目):显示未链接到此类的所有主题(用户已将此主题添加到此类)所有科目必须至少有一名教师。你现在明白我的意思了吗?你试图帮助我管理已经链接到课堂的现有科目。我不需要它。很抱歉,这很混乱。最后,这里的示例应该向你展示如何使用任何其他数据组合进行此操作。你可以使用更长的连接集,加入
教师课堂
等,然后
选择
ing您需要的内容。您是否使用了
MySQL Workbench
并尝试制作
EER
图表?这可能会帮助您更好地可视化数据。不要了解问题所在。检查答案以获得解决方案。
SELECT *
FROM `ClassesInfo`
WHERE (conditions here)
select * from Subject
where id in (select subject_id from TeacherVsSubject)
and id not in (select subject_id from ClassVsSubject where class_id = XX)