拆分MySQL并进行比较

拆分MySQL并进行比较,mysql,Mysql,我有一个问题,我不知道如何解决它,我是SQL的乞丐 我想显示与教师姓名同名的所有学生的姓名,在数据库中,教师姓名是一个字段,但包含两个逻辑字段(FirstName和LastName) 这是我的数据库格式 CREATE TABLE Faculty ( Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,NAME VARCHAR(50) ,Address VARCHAR(60) ,YearFounded YEAR ,Dean

我有一个问题,我不知道如何解决它,我是SQL的乞丐

我想显示与教师姓名同名的所有学生的姓名,在数据库中,教师姓名是一个字段,但包含两个逻辑字段(FirstName和LastName)

这是我的数据库格式

CREATE TABLE Faculty (
    Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
    ,NAME VARCHAR(50)
    ,Address VARCHAR(60)
    ,YearFounded YEAR
    ,Dean VARCHAR(50)
    );

CREATE TABLE Specialty (
    Id INT NOT NULL PRIMARY KEY auto_increment
    ,IdFaculty INT (11) NOT NULL
    ,NAME VARCHAR(50)
    ,FOREIGN KEY (IdFaculty) REFERENCES Faculty(Id)
    );

CREATE TABLE Course (
    Id INT NOT NULL PRIMARY KEY auto_increment
    ,IdSpecialty INT NOT NULL
    ,NAME VARCHAR(50)
    ,TeachingYear INT
    ,Semester INT
    ,Professor VARCHAR(50)
    ,< -- TEACHER
    FOREIGN KEY (IdSpecialty) REFERENCES Specialty(Id)
    );

CREATE TABLE Student (
    Id INT NOT NULL PRIMARY KEY auto_increment
    ,< -- STUDENT
    IdFaculty INT NOT NULL
    ,IdSpecialty INT NOT NULL
    ,CurrentYear INT
    ,StudyGroup VARCHAR(10)
    ,Semester INT
    ,Scholarship VARCHAR(2)
    ,FOREIGN KEY (IdFaculty) REFERENCES Faculty(Id)
    ,FOREIGN KEY (IdSpecialty) REFERENCES Specialty(Id)
    );

CREATE TABLE StudentData (
    Id INT NOT NULL PRIMARY KEY
    ,CNP CHAR(13)
    ,FirstName VARCHAR(30)
    ,LastName VARCHAR(30)
    ,Father VARCHAR(50)
    ,Mother VARCHAR(50)
    ,Address VARCHAR(200)
    ,Nationality VARCHAR(50)
    );

CREATE TABLE Grade (
    Id INT NOT NULL PRIMARY KEY auto_increment
    ,IdStudent INT NOT NULL
    ,IdCourse INT NOT NULL
    ,Grade INT
    ,ExamDate DATE
    ,FOREIGN KEY (IdStudent) REFERENCES Student(Id)
    ,FOREIGN KEY (IdCourse) REFERENCES Course(Id)
    );
创建表(
Id INT NOT NULL主键自动递增
,姓名VARCHAR(50)
,地址VARCHAR(60)
,成立年份
,迪安·瓦尔查尔(50岁)
);
创建表格专业(
Id INT NOT NULL主键自动递增
,IdFaculty INT(11)不为空
,姓名VARCHAR(50)
,外键(IdFaculty)参考教员(Id)
);
创建表格课程(
Id INT NOT NULL主键自动递增
,IdSpecialty INT不为空
,姓名VARCHAR(50)
,教学中心
,学期整数
,VARCHAR教授(50岁)
,<--老师
外键(IdSpecialty)引用专业(Id)
);
创建表学生(
Id INT NOT NULL主键自动递增
,<--学生
IdFaculty INT不为空
,IdSpecialty INT不为空
,本年度整数
,StudyGroup VARCHAR(10)
,学期整数
,VARCHAR奖学金(2)
,外键(IdFaculty)参考教员(Id)
,外键(IdSpecialty)参考专业(Id)
);
创建表StudentData(
Id INT非空主键
,CNP CHAR(13)
,名为VARCHAR(30)
,姓氏VARCHAR(30)
瓦查尔神父(50岁)
瓦查尔妈妈(50岁)
,地址VARCHAR(200)
,国籍:瓦查尔(50)
);
创建表格坡度(
Id INT NOT NULL主键自动递增
,IdStudent INT不为空
,IdCourse INT不为空
,整数级
,ExamDate日期
,外键(IdStudent)引用学生(Id)
,外键(IdCourse)参考课程(Id)
);

考虑到
课程.Professor
字段包含Professor firstname和lastname,我将使用以下查询:

select sd.FirstName from StudentData sd
LEFT JOIN Student s on sd.Id = s.Id
LEFT JOIN Specialty special on s.IdSpecialty = special.Id
LEFT JOIN Course c on special.Id = c.IdSpecialty
WHERE c.Professor = CONCAT(sd.FirstName, ' ', sd.LastName)
编辑:

如果您只希望学生的名字与教授的名字相同(而不是姓氏),并且教授字段包含类似“Jacques Dupont”(例如)的值,其中Jacques是FirstName,Dupont是lastname,请尝试以下操作(使用子字符串索引函数获取教授的名字):


StudentData没有外键?
select sd.FirstName from StudentData sd
LEFT JOIN Student s on sd.Id = s.Id
LEFT JOIN Specialty special on s.IdSpecialty = special.Id
LEFT JOIN Course c on special.Id = c.IdSpecialty
WHERE SUBSTRING_INDEX(c.Professor,' ',1) = sd.FirstName