2015-10-29 3 views
0

Это мой первый раз в StackOverflow, и я изучаю SQL, но у меня проблемы с объединениями и т. Д. У меня сегодня есть задача.(Access) Sql Statement Использование 3 таблиц

Хорошо Вот таблицы:

STUDENT 
Student_ID Instructor_ID Adviser_ID 
2   9723   9945 
7   9723   9723 
8   9801   9945 
17   9945   9945 
19   9624   9945 
21   9723   9723 

INSTRUCTOR 
Instructor_ID Person_ID 
9624   14 
9723   15 
9801   11 
9945   16 

PERSON 
Person_ID Person_First_Name Person_Last_Name 
1   Jim    Johnson 
2   John    Doe 
... 
11   Chuck    John 
... 
14   Joanne    Jackson 
15   Steven    Pruck 
16   Scott    Buttermilk 
... (Possibly More Records) 

SQL-запрос я пытаюсь получить это имя инструктора каждого студента и инструктора, который является их советник. Вот формат:

Student_ID | Instructor's First and Last Name | Adviser's First and Last Name 

Также обратите внимание, что идентификатор advisor_ID совпадает с инструктором_ID. Вот что я придумал до сих пор, но идти дальше, я полагаю, мне нужно два внутренних соединений или некоторые подзапрос:

SELECT STUDENT.Student_ID, Person.person_first_name + " " + Person.person_last_name AS Instructor 
FROM STUDENT AS S, PERSON AS P, INSTRUCTOR AS I 
WHERE S.Instructor_ID = I.Instructor_ID 
AND I.person_ID = P.person_ID 
ORDER BY S.Student_ID; 

EDIT: Это для базы данных Microsoft Access (на всякий случай)

+0

Какова цель 'INSTRUCTOR' таблицы? Похоже, что отношения между учениками и преподавателями уже обрабатываются в таблице «СТУДЕНТ». –

+0

Таблица инструкторов используется для поиска Person_ID, который вам нужен, чтобы найти имя Person в таблице Person. – JimJohnson

+0

По-прежнему ищу правильный ответ, поскольку я не верю, что они работают на меня. – JimJohnson

ответ

0

Попробуйте этот путь

SELECT S.Student_ID, P.person_first_name + " " + P.person_last_name AS Instructor, P1.person_first_name + " " + P1.person_last_name AS Adviser 
    FROM STUDENT AS S, 
    inner join INSTRUCTOR AS I on S.Instructor_ID = I.Instructor_ID 
    inner join PERSON AS P on I.person_ID = P.person_ID 
    inner join INSTRUCTOR AS I1 on S.Adviser_ID = I1.Instructor_ID 
    inner join PERSON AS P1 on I1.person_ID = P1.person_ID 
ORDER BY S.Student_ID; 
+0

Не знал, что вы можете вытаскивать из одной таблицы несколько раз и называть ее чем-то другим. Это помогло мне, даже несмотря на то, что я не мог заставить ваш запрос работать с моей стороны. – JimJohnson

+0

@JimJohnson Вы хотите советника по отображению, чтобы советник присоединился к второй таблице. если та же таблица не отображает результат. –

0
SELECT STUDENT.Student_ID, Person.person_first_name + " " + Person.person_last_name AS Instructor , P.person_first_name + " " + P.person_last_name AS Adviser 
FROM STUDENT AS S 
JOIN INSTRUCTOR AS I ON I.Instructor_ID = S.Instructor_ID 
JOIN PERSON AS P ON P.Person_ID = I.Person.ID 
ORDER BY S.Student_ID; 
0

Это использует два Lookups для двух student полей (instructor_id и adviser_id):

select student_id, 
    (select concat(person_first_name, ' ', person_last_name) 
    from instructor i 
     inner join person p on i.person_id=p.person_id 
    where i.instructor_id=student.instructor_id) instructor, 
    (select concat(person_first_name, ' ', person_last_name) 
    from instructor i 
     inner join person p on i.person_id=p.person_id 
    where i.instructor_id=student.adviser_id) advisor 
from student 

Вы можете увидеть его в действии здесь: http://sqlfiddle.com/#!9/13b07e/3

0

Это то, что я в конечном итоге работать:

SELECT S.Student_id, P.person_first_name+" "+P.person_last_name AS Instructor, P1.person_first_name+" "+P1.person_last_name AS Adviser 

FROM Student AS S, PERSON AS P, Instructor AS I, Person AS P1, Instructor AS I1 
WHERE S.Instructor_ID = I.Instructor_ID 
AND I.person_ID = P.person_ID 
AND S.Adviser_ID = I1.Instructor_ID 
AND I1.person_ID = P1.person_ID 
ORDER BY S.Student_id; 
Смежные вопросы