Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 获取难以与输入数据连接的数据,SQL查询_Mysql_Sql - Fatal编程技术网

Mysql 获取难以与输入数据连接的数据,SQL查询

Mysql 获取难以与输入数据连接的数据,SQL查询,mysql,sql,Mysql,Sql,首先,我想问你(这样我的问题对你来说会更清楚)是否有一个在线数据库图表工具(?),我可以在其中输入我的sql代码,它会为我绘制图表(带表及其关系) 我发现并尝试了一些工具,但大多数工具只能创建表和它们之间的关系,但不允许导入我的sql (2) 我需要让所有的班级都和老师联系起来。 有两种类型的联系:老师可以是班主任,也可以是老师。 如何获取所有连接到教师的课程 (3)还有一个问题:我的约束条件正确吗 SQL方案(): 试试这个:select*from Class where teacher\u

首先,我想问你(这样我的问题对你来说会更清楚)是否有一个在线数据库图表工具(?),我可以在其中输入我的sql代码,它会为我绘制图表(带表及其关系)

我发现并尝试了一些工具,但大多数工具只能创建表和它们之间的关系,但不允许导入我的sql

(2) 我需要让所有的班级都和老师联系起来。 有两种类型的联系:老师可以是班主任,也可以是老师。 如何获取所有连接到教师的课程

(3)还有一个问题:我的约束条件正确吗

SQL方案():


试试这个:
select*from Class where teacher\u id=some\u id\u from\u teacher\u table

对于你的第二个问题,使用如下方法:

select *
  from Class
 where teacher_id = 1

union

select Class.*
  from Class
       join ClassVsSubject on Class.id = ClassVsSubject.class_id
       join TeacherVsSubject on ClassVsSubject.subject_id = TeacherVsSubject.subject_id
 where TeacherVsSubject.teacher_id = 1
由于您没有说明哪位老师是起点,因此我使用了id为1的选项

请注意,
union
消除了重复条目,无需单独处理

对于您的数据模型(问题3),我认为一个问题是,对于不同的类和同一主题,如“数学”或“英语”,您需要在
主题
表中使用不同的条目,否则,联接将不起作用:
假设“英语”科目的id为1。现在,如果id为1的类和id为2的类都有这个主题,那么ClassVsSubject中会有以下数据:

class_id   subject_id
       1            1
       2            1
您想如何进入table TeacherVS科目,即id为5的教师在1班教英语,而不是在2班教英语?你不能!如果您输入科目id为1、教师id为5的记录,这将适用于所有班级

为了解决这个问题,您可以从两个
ClassVsSubject
TeacherVsSubject
中创建一个表。这将是这样的:

CREATE TABLE `ClassVsSubjectVsTeacher` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `subject_id` INT(11) NOT NULL,
    `class_id` INT(11) NOT NULL,
    `teacher_id` INT(11) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `subject_id_class_id` (`subject_id`, `class_id`, `teacher_id`),
    INDEX `FK_ClassVsSubjectVsTeacher_Class` (`class_id`),
    INDEX `FK_ClassVsSubjectVsTeacher_Teacher` (`teacher_id`),
    INDEX `FK_ClassVsSubjectVsTeacher_Subject` (`subject_id`),
    CONSTRAINT `FK_ClassVsSubjectVsTeacher_Class` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`),
    CONSTRAINT `FK_ClassVsSubjectVsTeacher_Teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`id`),
    CONSTRAINT `FK_ClassVsSubjectVsTeacher_Subject` FOREIGN KEY (`subject_id`) REFERENCES `subject` (`id`)
);

对于数据模型,这里不需要
id
列,主键可以是跨越所有三个外键的组合键。但是,根据客户端软件的不同,拥有它可能会很有用。例如。一些或映射工具需要单列主键。

描述了我以前使用过的一个工具,将可视化代码转换为流程图,它至少可以生成一个难看但可用的流程可视化图表。不确定它是否是您要找的,但我相信它可以做到这一点。@NicholasV.,忘了说,该工具必须是“在线”的,谢谢你的帮助,但这没有帮助。它将只返回具有
teacher\u id
的教师是form master的班级。@SharikovVladislav这是对“如何获取所有连接到教师的班级”的有效回答。它可能没有您想要的那么健壮。你应该把你要找的东西放在一个样本输出中。@Shawn,我不认为它是有效的,仅仅因为它显示了错误的连接。我说:
我需要把所有的班级都和老师联系起来。有两种类型的联系:老师可以是班主任,也可以是老师。如何获取连接到教师的所有班级。
不仅仅是1类连接。这两种类型都需要。谢谢你的回答,稍后再试。明白了吗?:)谷歌翻译不知道是什么!你能解释一下吗?古怪的一点?等一下?如果我制作一个表
ClassVsSubjectVsTeacher
,那么当我试图为课堂添加主题时,我必须始终同时添加教师和主题。现在我添加了主题,添加了将要教授的主题的老师,然后为每节课选择一些主题,所以我不需要在每一行中输入老师将要教授的主题(比如在一张大桌子中),以获得答案,请参见。据《每日邮报》报道,这是一种轻松的“我抓住你了”发音。我编辑了我的答案,以更详细地解释表格设计的问题。Ghm。谢谢你的回答。我想你一点也不理解我(当然你不理解,因为你没有对我的系统等的描述)。我不知道在其他国家,但在我的国家有班主任(班上的妈妈或爸爸:他组织班级)。在
Class
字段
teacher\u id
中显示这种类型的连接。另一种是这样的:班级是学习科目。科目由教师讲授。我首先添加科目,然后选择教师(可能很多),然后选择班级要学习的科目。这是第二种类型。所以我不选择老师上课,然后选择科目。我只选择与哪个老师相关的科目。@SharikovVladislav好的,如果两个老师与一个科目相关,这意味着他们在每个与该科目相关的班级中都没有课?
CREATE TABLE `ClassVsSubjectVsTeacher` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `subject_id` INT(11) NOT NULL,
    `class_id` INT(11) NOT NULL,
    `teacher_id` INT(11) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `subject_id_class_id` (`subject_id`, `class_id`, `teacher_id`),
    INDEX `FK_ClassVsSubjectVsTeacher_Class` (`class_id`),
    INDEX `FK_ClassVsSubjectVsTeacher_Teacher` (`teacher_id`),
    INDEX `FK_ClassVsSubjectVsTeacher_Subject` (`subject_id`),
    CONSTRAINT `FK_ClassVsSubjectVsTeacher_Class` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`),
    CONSTRAINT `FK_ClassVsSubjectVsTeacher_Teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`id`),
    CONSTRAINT `FK_ClassVsSubjectVsTeacher_Subject` FOREIGN KEY (`subject_id`) REFERENCES `subject` (`id`)
);