2014-01-18 2 views
0

Как использовать select, если у меня есть 3 таблицы?SQL select, 3 таблицы

Таблицы:

school_subject(ID_of_subject, workplace, name) 
student(ID_of_student, firstName, surname, adress) 
writing(ID_of_action, ID_of_sbuject, ID_of_student) 

Я хочу написать имя студента и фамилию (в алфавитном порядке), которые имеют workplace=home.

Возможно ли это? А как по алфавиту?

SELECT s.firstName, s.surname 
FROM student S, school_subject P, writing Z 
WHERE P.workplace = 'home' 
     AND P.ID_of_subject = Z.ID_of_subject 
     AND Z.ID_of_student = s.ID_of_student; 

ответ

1
SELECT s.firstName, s.surname 
FROM student S INNER JOIN writing Z 
ON Z.ID_of_student = s.ID_of_student 
INNER JOIN school_subject P 
ON P.ID_of_subject = Z.ID_of_subject 
WHERE P.workplace = 'home' 
ORDER BY S.firstName, S.surname // Sort the list 
0

Для заказа по алфавиту результата можно использовать ORDER BY ключевое слово. Таким образом, ваш запрос становится:

SELECT DISTINCT S.firstName, S.surname 
FROM student S, school_subject P, writing Z 
WHERE P.workplace = 'home' AND 
P.ID_of_subject = Z.ID_of_subject AND 
Z.ID_of_student = S.ID_of_student 
ORDER BY S.surname, S.firstName 

DISTINCT ключевым слово необходимо, потому что в письменном столе есть в конечном счете больше кортежей данные ключей ID_of_subject и ID_of_student.
Так что это необходимо, чтобы избежать повторения firstName и фамилии много раз.

0

Обратите внимание, что каждый студент идентифицируется ID_of_student, не firstName и surname, так @danjok сказал использование DISTINCT, если вы хотите только имя и фамилию.

Если вы хотите, чтобы выбрать всех студентов, которые удовлетворяют вашим требованиям (даже если два или больше студентов имеют те же firstName и surname), вы должны в том числе ID_of_student на SELECT пункта:

SELECT S.ID_of_student, S.firstName, S.surname 
FROM student S 
INNER JOIN writing W ON W.ID_of_student = S.ID_of_student 
INNER JOIN school_subject P ON P.ID_of_subject = W.ID_of_subject 
WHERE P.workplace = 'home' 
ORDER BY S.firstName asc, S.surname asc 
Смежные вопросы