SQL查询以查找导师和学员

SQL查询以查找导师和学员,sql,Sql,在一次采访中,我被问到了一个问题,从那以后我一直没能真正找到答案。我觉得我接近一个答案,但缺少正确的语法。该问题易于陈述和理解: 假设你有一张由names和ages组成的表格,就像这样 -------------- | name | age | -------------- | Joe | 30 | | Tom | 27 | | Mike | 25 | -------------- 编写一个SQL查询,返回(name,name)列表,其中元组中的第一个名字是导师,第二个是学员。一个人

在一次采访中,我被问到了一个问题,从那以后我一直没能真正找到答案。我觉得我接近一个答案,但缺少正确的语法。该问题易于陈述和理解:

假设你有一张由
name
s和
age
s组成的表格,就像这样

--------------
| name | age |
--------------
| Joe  |  30 |
| Tom  |  27 |
| Mike |  25 |
--------------
编写一个SQL查询,返回
(name,name
)列表,其中元组中的第一个名字是导师,第二个是学员。一个人是比他年长的任何人的导师。因此,上述示例的解决方案将返回

--------------
| name | age |
--------------
| Joe  | Tom |
| Joe  | Mike|
| Tom  | Mike|
--------------
乔是每个人的导师,因为他是最年长的,而迈克不是任何人的导师,因为他是最年轻的

就我而言,我确信这是一个嵌套查询,我必须再次调用同一个表。我知道这种语法是错误的,但我觉得答案接近于:

SELECT x.name, y.name
FROM names_ages.x, names_ages.y
WHERE x.name >= ALL(y.name)

渴望知道真正的答案是什么。

你只需要一个不平等的
连接:

SELECT mentor.name as mentor, mentee.name as mentee
FROM names_ages mentor JOIN
     names_ages mentee
     ON mentor.age > mentee.age;

您只需要一个不平等的
连接

SELECT mentor.name as mentor, mentee.name as mentee
FROM names_ages mentor JOIN
     names_ages mentee
     ON mentor.age > mentee.age;

今天的提示:切换到现代的显式
JOIN
语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外部联接。今天的提示:切换到现代的显式
join
语法。更易于写入(无错误),更易于读取(和维护),并且在需要时更易于转换为外部联接。