有关FROM关键字的MySQL语法说明

时间:2013-09-28 05:17:23

标签: mysql correlated-subquery

我使用this MySQL doc page

找到的this StackOverflow question.构建了以下查询

它给了我想要的东西:每个人钥匙的一条记录,以及该人参与的最大(最近)匹配键。

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

SELECT personforeignkey, matchforeignkey

FROM   peoplematchesheroes s1

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

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

1 个答案:

答案 0 :(得分:0)

s1和s2是 table aliases ,在这种情况下,两者都是同一个表'peoplematchesheroes'。 s1用作外部查询的别名,s2用作内部相关子查询的别名。

没有必要为相关子查询使用表别名,但在您的情况下,由于您的内部查询也引用与外部查询相同的表,因此您需要对它们进行别名。将其视为范围的解决方案,因为否则无法分辨您所指的“personforeignkey”字段 - 表中的相关子查询或外部子查询。

希望这是有道理的。