拆分MySQL并进行比较
我有一个问题,我不知道如何解决它,我是SQL的乞丐 我想显示与教师姓名同名的所有学生的姓名,在数据库中,教师姓名是一个字段,但包含两个逻辑字段(FirstName和LastName) 这是我的数据库格式拆分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
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