如何返回在SQL中学习两个以上学科的学生列表

时间:2019-06-13 02:31:30

标签: mysql sql

鉴于以下数据模式和最少的数据记录,我需要制定一个查询以显示学习两个以上学科的学生。

SQL SERVER中的表

create table Estudiante 
(
id int primary key not null,
nombre varchar(50)
)

insert into Estudiante (id, nombre)
values
('1','Maria'),
('2','Juan'),
('3','Yarlin'),
('4','Ana'),
('5','Marcos'),
('6','Juana'),
('7','Esther'),
('8','Luisa')

create table Materia 
(
id int primary key not null,
nombre varchar(50),
estado varchar(10)
)

insert into Materia (id, nombre, estado)
values
('1','Filosofía','activo'),
('2','Bases de datos','activo'),
('3','Programación','activo'),
('4','Literatura','activo'),
('5','Teología','activo')


create table MateriaProfesor 
(
id int primary key not null,
idMateria int foreign key references Materia,
idProfesor int foreign key references Profesor
)

insert into MateriaProfesor (id, idMateria, idProfesor)
values
('11','2','1'),
('12','1','2'),
('13','2','1'),
('14','3','4'),
('15','4','3'),
('16','5','2')

create table MateriaEstudiante 
(
id int primary key not null,
idMateria int foreign key references Materia(id),
idEstudiate int foreign key references Estudiante(id),
Fecha date
)

insert into MateriaEstudiante (id, idMateria, idEstudiate, Fecha)
values
('20','4','3','10/11/2017'),
('21','5','2','10/11/2017'),
('22','3','8','10/11/2017'),
('23','5','4','11/11/2017'),
('24','1','5','11/11/2017'),
('25','1','3','11/11/2017')

3 个答案:

答案 0 :(得分:0)

尝试逐步分析问题:

  1. 列出所有学生,表示GROUP BY
  2. 该研究的意思是FROM StudentCourses LEFT JOIN Students ON StudentCourse.StudentID = Students.StudentID
  3. 超过2个主题,表示where count(...) > 2

PS。 1.使用英语。 2.想想自己。

答案 1 :(得分:0)

根据您的问题和给定的信息,我提出了此查询。

import java.net.URL;
import java.io.InputStream;

…

InputStream is = new URL("....").openStream(); // will throw here if URL doesn't work
PDDocument doc = PDDocument.load(is); // will throw here if PDF malformed or empty file
…
is.close();

答案 2 :(得分:0)

  1. 表定义似乎使用非英语单词。和 因为您还没有翻译哪个表代表什么 实体/操作,所以我将在此处进行猜测 了解表格。我的猜测:

    研究者=学生
    nombre =名称

    材料=主题
    estado =状态

    MateriaEstudiante = SubjectStudentEnrollment
    Fecha =不知道现在是几号,所以忽略它的使用

    1. 基于上述猜测,并结合有限的解释 问题的详细信息,这是快速查询:
    ;WITH CTE AS
    (
         SELECT   E.id
                  ,E.nombre
                  ,SubCount = COUNT(ME.idMateria)
         FROM     MateriaEstudiante ME
                  INNER JOIN Estudiante E      
                    ON ME.idEstudiate = E.id
         GROUP    BY
                  E.id
                  ,E.nombre
         HAVING   COUNT(ME.idMateria) > 2
    )
    SELECT nombre
    FROM   CTE;    
    

注意:-使用内部联接,因为您需要学生信息,因此MateriaEstudiante中具有NULL StudentId的任何行都与您无关。