2010-03-06 12 views
5

Puoi anche scrivere hql in ibernazione o query di criteri.Aiutami a scrivere una dichiarazione SQL per fare qualcosa di simile a questo

devo Maestro entità e l'entità degli studenti in questo modo:

class Teacher { 
    public Long id ; 
    public Set<Student> students; 
} 

class Student { 
    public Long id ; 
    public Teacher teacher ; 
    public Boolean passedSemester1; 
    public Boolean passedSemester2; 
} 

È possibile assumere le mie tabelle hanno l'una la seguente struttura.

Insegnante e studente ha una relazione bidirezionale a molte. La tabella studenti gestisce la chiave esterna.

Ho bisogno di scoprire gli Insegnanti i cui studenti hanno superato tutti i semestre1 e semestre2. In realtà ho anche bisogno di cercare:

tutto non è riuscito a passare sia semester1 e semester2, tutti semester1 passato, ma non è riuscito a passare semester2, tutti falliti a passare semester2 semester1 ma passati.

Si potrebbe scrivere una qualsiasi di queste query, altre non dovrebbero essere grandi differenze.

Al fine di non causare altri equivoci, astratto il mio vero problema in questo semplice. Ho bisogno di unire le due tabelle per fare altre query complesse, quindi non è così facile come solo per interrogare la tabella studenti.

Grazie!

+0

quale database? –

risposta

1

In SQL, per trovare gli insegnanti i cui studenti tutti passati entrambi i semestri:

SELECT teacher_id 
FROM student 
GROUP BY teacher_id 
HAVING MIN(passed_semester_1) AND MIN(passed_semester_2) 

risultati:

1 
4 

di trovare i docenti i cui studenti tutto il semestre passato 1, ma non tutto il semestre passato 2:

SELECT teacher_id 
FROM student 
GROUP BY teacher_id 
HAVING MIN(passed_semester_1) AND NOT MIN(passed_semester_2) 

Risultati:

2 

Aggiornamento unirsi dimostrazione:

SELECT T2.* 
FROM (
    SELECT teacher_id 
    FROM student 
    GROUP BY teacher_id 
    HAVING MIN(passed_semester_1) AND MIN(passed_semester_2) 
) AS T1 
JOIN teacher AS T2 ON T1.teacher_id = T2.teacher_id 

Usando questa struttura delle tabelle e dati di test:

CREATE TABLE student (student_id INT NOT NULL, teacher_id INT NOT NULL, passed_semester_1 INT NOT NULL, passed_semester_2 INT NOT NULL); 
INSERT INTO student (student_id, teacher_id, passed_semester_1, passed_semester_2) VALUES 
(1, 1, 1, 1), 
(2, 1, 1, 1), 
(3, 1, 1, 1), 
(4, 2, 1, 1), 
(5, 2, 1, 0), 
(6, 2, 1, 1), 
(7, 3, 0, 1), 
(8, 3, 1, 1), 
(9, 4, 1, 1); 
+0

In realtà io astraggo i miei problemi in questa semplice domanda. Devo unirmi alle tabelle per fare altre cose. È possibile all'interno delle tabelle di join? – Sawyer

+0

Sì, puoi unirti, ad esempio per ottenere il nome dell'insegnante. –

+0

grazie Marco, proverò i tuoi suggerimenti. – Sawyer

Problemi correlati