0

我使用通过这个 StackOverflow 问题找到的这个 MySQL 文档页面构建了以下查询。

它给了我我想要的东西:每个 personkey 一个记录,以及那个人参与的最大(最近)matchkey。

但我不明白“s1”和“s2”的用途,也不明白 FROM 行中使用的结构(而且因为我不知道它叫什么,所以很难搜索它。)这个查询实际上发生了什么?

SELECT personforeignkey, matchforeignkey

FROM   peoplematchesheroes s1

WHERE  matchforeignkey = (SELECT MAX(s2.matchforeignkey)
                          FROM peoplematchesheroes s2
                          WHERE s1.personforeignkey = s2.personforeignkey)

注意:我知道这个查询效率低下,但我想在尝试优化之前了解相关子查询的构造。

4

1 回答 1

0

s1 和 s2 是表别名,在这种情况下,它们都用于同一个表“peoplematchesheroes”。s1 用作外部查询的别名,s2 用作内部相关子查询的别名。

不必为相关子查询使用表别名,但在您的情况下,由于您的内部查询也引用与外部查询相同的表,因此您需要为它们设置别名。将其视为范围的解析,因为否则将无法分辨您指的是哪个“personforeignkey”字段 - 来自表相关子查询的字段或来自外部的字段。

希望这是有道理的。

于 2013-09-28T05:44:00.190 回答