2012-06-25 3 views
0

У меня следующие данные:простой SQL-запрос

Student.Name; Student.RollNum; Student.Email; Student.Courses; Student.Birthday; Course.ID; Название курса; Course.Instructor

Теперь мой Heres Предлагаемая конструкция DB: две таблицы => Студенты, курсы Student.ID новое поле added-> первичный уникальный ключ для таблицы Students

Теперь, что бы запрос, чтобы получить все курсы, сделанные Джоном Доу (чей Student.ID = 1234)?

Мне нужны названия курсов, а не идентификаторы.

+3

Это домашнее задание? –

+0

Недостаток конструкции вашего стола. У вас есть все курсы, перечисленные вместе в одном столбце (Student.Courses), и вы не можете редактировать портативный sql, который будет использовать отдельные элементы из этого столбца. Вам нужна третья таблица (заявки), которая объединяет идентификатор studentID с идентификатором курса (и, возможно, год/срок) –

ответ

2

я бы конструировать его с 3-мя столами:

Students - ID; Name; RollNum; Email; Birthday; 
Courses - ID; Name; Instructor 
Students_Courses - a join table between the students and the courses 

Затем вы можете сделать следующее

SELECT c.Name 
FROM Students s 
INNER JOIN Students_Courses sc 
    ON s.id = sc.studentId 
INNER JOIN Courses c 
    ON sc.course_id = c.courseid 
WHERE s.id = 1234 

ИЛИ если вы не хотите какой-либо из информации студента, вы можете сократить запрос чтобы:

SELECT c.Name 
FROM Students_Courses sc 
INNER JOIN Courses c 
    ON sc.course_id = c.courseid 
WHERE sc.studentId = 1234 
0

Я хотел бы добавить третьей таблицы присоединиться Stud и курсы. Это позволит многим студентам пройти много курсов. В таблице будут храниться StudentId и CourseId. Затем вы можете получить результаты по следующему запросу:

SELECT c.Id, c.CourseName 
FROM Courses c 
    INNER JOIN StudentCourse sc 
    ON c.CourseId = sc.CourseId 
WHERE sc.StudentId = 1234 
0

Домашнее задание? Вам нужна новая таблица, скажем, StudentsCourses, которая представляет связь между учеником и курсами, которые он посещает. Вам нужно добавить CourseId в таблицу курса. Таким образом, StudentsCourses определяется как:

StudentCourses(StudentId, CourseId) 

На данный момент, вы получите прослушанные курсы с объединением:

SELECT Courses.* 
FROM Courses JOIN StudentsCourses sc ON sc.CourseId = Courses.CourseId 
WHERE sc.StudenId = [DesideredStudentId] 
0

Вашего дизайн столом является некорректным. У вас есть все курсы, перечисленные вместе в одном столбце (Student.Courses), и вы не можете редактировать портативный sql, который будет использовать отдельные элементы из этого столбца. Вам нужна третья таблица (заявки), которая объединяет идентификатор studentID с идентификатором курса (и, возможно, год/срок).

Но если вы добавить эту таблицу, то SQL будет выглядеть примерно так:

SELECT c.Name 
FROM Enrollments e 
INNER JOIN Courses c on c.ID = e.CourseID 
WHERE e.StudentID = 1234 
0

На самом деле вам нужна будет третья таблица, которая содержит курсы, принятые каждый студент, может быть столь же просто, как 2 столбца (StudentId, CourseId), и запрос будет

SELECT c.Name 
FROM Students as s 
JOIN CoursesTaken as t on t.StudentId = s.Id 
JOIN Courses as c on c.id = t.CourseId 
WHERE s.Id = 1234 
Смежные вопросы