2013-11-05 30 views
5

Desidero selezionare il risultato in sqlite da più tabelle con più chiavi esterne, ho provato JOIN ma non ha funzionato così bene; per esempio:Come selezionare il risultato sqlite da più tabelle con più chiavi esterne

un tavolo per STUDENT:

CREATE TABLE STUDENT (
STUDENT_NAME TEXT  NOT NULL, 
STUDENT_NUMBER INTEGER PRIMARY KEY NOT NULL, 
STUDENT_ADDRESS TEXT  NOT NULL 
); 

e un tavolo per EXAMS:

CREATE TABLE EXAMS(
EXAM_CODE  INTEGER PRIMARY KEY NOT NULL, 
EXAM_SUBJECT TEXT  NOT NULL, 
EXAM_LOCATION TEXT  NOT NULL 
); 

e una tabella chiamata WROTE_EXAM per ottenere le informazioni per gli studenti che ha scritto un esame specifico

CREATE TABLE WROTE_EXAM (
STUDENT_NUMBER INTEGER  NOT NULL, 
EXAM_CODE  INTEGER  NOT NULL, 
DATE   DATE  NOT NULL, 
FOREIGN KEY(STUDENT_NUMBER) REFERENCES STUDENT(STUDENT_NUMBER), 
FOREIGN KEY(EXAM_CODE) REFERENCES EXAMS(EXAM_CODE)); 

questo è un esempio di dati io inserite in modo in tabelle:

STUDENT_NAME : John 
STUDENT_NUMBER: 123456789 
STUDENT_ADDRESS : 10th street 
EXAM_CODE: 123 
EXAM_SUBJECT: One Subject 
EXAM_LOCATION: Class 

ora, voglio:
a) i nomi degli studenti in uscita, i codici d'esame e posizione degli studenti, che ha scritto l'esame
b) il codice esame di uscita, esame soggetto e il luogo d'esame per gli studenti con ID: 123456789

grazie

+0

Quali JOIN hai provato? –

+0

@muistooshort Ho fatto 'SELECT DISTINCT STUDENT_NAME, EXAM_CODE, STUDENT_LOCATION FROM WROTE_EXAM, STUDENT JOIN EXAMS, STUDENTI' non so come unire 3 tabelle insieme e ottenere queste informazioni –

risposta

10

Quando si uniscono le tabelle si quasi sempre desidera includere una condizione di join esplicito. La SQLite syntax diagrams può essere utile:

Join Op Join Constraint

Così lo SQL dal tuo commento dovrebbe apparire più simile a questo:

select student.student_name, exams.exam_code, ... 
from student 
join wrote_exam using (student_number) 
join exams using (exam_code) 
where ... 

o si potrebbe usare JOIN ... ON:

select student.student_name, exams.exam_code, ... 
from student 
join wrote_exam on student.student_number = wrote_exam.student_number 
join exams on exams.exam_code = wrote_exam.exam_code 
where ... 

Quindi aggiungere le condizioni where per filtrare i risultati secondo necessità.

Nota che ho aggiunto anche alcuni qualificatori di tabella alle colonne nella tua clausola SELECT, quelli sono necessari per specificare in modo univoco quale exam_code ti interessa e poiché una colonna deve essere qualificata, li ho fatti tutti per coerenza ; nella vita reale li prefissi tutti per rendere le cose belle ed esplicite.

Inoltre, non vedo uno student_location ovunque, forse si intende student.student_address o exams.exam_location.

+0

grazie per l'aiuto –

Problemi correlati