Не уверен, как написать этот SQL-запрос - PullRequest
2 голосов
/ 07 октября 2011

Вот запрос, который я не могу понять, как это сделать: «выполнить запрос SQL, который выбирает имена старших, имена их наставников и GPA в порядке убывания значений GPA».Таблицы моей базы данных следующие:

Персона (Имя, ID, Адрес, DateOfBirth)

Инструктор (InstructorID, Rank, Salary)

Студент (StudentID, классификация, GPA, MentorID, CreditHours)

Другая информация, которая может быть полезна: Классификация строки, "Freshman" и т. Д.Персональный ID понравился InstructorID и StudentID в их таблицах.И преподаватели и студенты находятся в личном столе.Студенты и преподаватели могут быть наставниками (я не уверен, что это имеет значение).Если вам нужна другая информация, дайте мне знать!Спасибо!

Ответы [ 4 ]

4 голосов
/ 07 октября 2011
SELECT       SeniorDetails.Name AS SeniorName,
             MentorDetails.Name AS MentorName,
             Student.GPA        AS SeniorGPA

FROM         Student

  INNER JOIN Person AS SeniorDetails
  ON         SeniorDetails.ID = Student.StudentID

  INNER JOIN Person AS MentorDetails
  ON         MentorDetails.ID = Student.MentorID

WHERE        Student.Classification = 'Senior'

ORDER BY     Student.GPA

Если я вас понимаю ... [1]

Разбивка:

  • INNER JOIN Person AS SeniorDetails
    • INNER JOIN сообщает sql, что он ДОЛЖЕН иметь совпадение
    • * AS означает переименование таблицы person (нам нужно, поскольку на таблицу Person фактически ссылаются дважды в двух отдельных соединениях)
    • Ссылкатаблицы Person и Student по идентификатору и StudentID, соответственно.
    • Присвойте значение (теперь объединенное) SeniorDetails.Name в операторе выбора для возврата
  • INNER JOIN Person AS MentorDetails
    • Опять же, должно быть совпадение
    • Переименуйте его в MentorDetatails для ясности
    • Свяжите таблицы Person и Student по ID и MentorIDс уважением
    • Ссылка на (теперь присоединенное) значение MentorDetails.Name в выбранном заявлении для возврата
  • WHERE Student.Classification = 'Senior'
    • Только захватить Студенты, которые являются старшими
  • ORDER BY Student.GPA
    • Упорядочить результаты по GPA

[1] Приведенный выше ответ основан исключительно на информации, которую я смог получить от этой редакции .Если мне не удастся обновить мой ответ для последующих редакций, , пожалуйста, не убивайте меня .

1 голос
/ 07 октября 2011

Хитрость в том, что вам нужны имена двух человек, поэтому вам нужно присоединиться к таблице Персона дважды, один раз для студентов и один раз для наставников.

SELECT
  Person.Name,
  Mentor.Name,
  Student.GPA

FROM
  Student
JOIN
  Person
    ON (Student.StudentID = Person.ID)
JOIN
  Person as Mentor
    ON (Student.MentorID = Person.ID)

WHERE
  Student.Classification = "Senior"

ORDER BY
  Person.GPA DESC,
  Person.Name
;
1 голос
/ 07 октября 2011
SELECT 
      ps.Name AS SeniorName
    , pi.Name AS MentorName
    , s.GPA
FROM 
      Student AS s
  JOIN
      Person AS ps
          ON ps.ID = s.StudentID
  JOIN 
      Person AS pi
          ON pi.ID = s.MentorID
WHERE 
      s.Classification = 'Senior'
ORDER BY
      s.GPA DESC
0 голосов
/ 07 октября 2011

Вам нужно сделать объединение на столах, http://dev.mysql.com/doc/refman/5.0/en/join.html описывает, как работает синтаксис объединения в MySQL. Кроме того, вы хотите посмотреть на заказ синтаксис http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...