6

假设我有一张Person桌子和一张Courses桌子。在Person表中我有列PersonName。在表中,Courses假设我有CourseTitle和。是 1-4(4 是最难的)。我如何从每个人那里返回一个人员列表,每个人都有一个列显示他们正在上的最难的课程。PersonNameCourseDifficultyCourseDifficultyPersonCourseTitle

据我所知,通过执行以下操作,我将获得 Brett 上最难的课程的 CourseTitle:

SELECT CourseTitle 
FROM Courses 
WHERE PersonName = 'Brett' 
  AND CourseDifficulty = (SELECT MAX(CourseDifficulty) 
                          FROM Courses 
                          WHERE PersonName='Brett')

但是我如何为 Person 表中的每个人运行它呢?我希望结果类似于

Brett-SQL For Dummies 4
Tim-Quantum Mechanics
Jane-Thermodynamics 2

对不起noobness。在此先感谢您的帮助!

4

2 回答 2

7

你可以使用以下

SELECT p.name ,p.address, c.courseTitle ,c.courseDifficulty FROM (
        SELECT personName, courseTitle, MAX(courseDifficulty) AS courseDifficulty
        FROM course
        GROUP BY personName 
) AS c RIGHT JOIN person AS p ON p.name = c.personName

这里我假设 personName 是唯一的。否则,您可以在此处使用唯一 ID 而不是人名,并在选择语句中添加此字段。

于 2012-04-27T18:40:32.477 回答
1

尝试这个:

SELECT c.CourseTitle, c.PersonName, c.CourseDifficulty
  FROM Courses c
 WHERE c.CourseDifficulty=(SELECT MAX(c2.CourseDifficulty) FROM Courses c2 WHERE c2.PersonName=c.PersonName)
于 2012-04-27T18:17:26.200 回答