它给了我想要的东西:每个人钥匙的一条记录,以及该人参与的最大(最近)匹配键。
但我不明白“s1”和“s2”的目的,也不理解FROM行中使用的构造(因为我不知道它叫什么,所以难以搜索它。)这个查询实际上发生了什么?
SELECT personforeignkey, matchforeignkey
FROM peoplematchesheroes s1
WHERE matchforeignkey = (SELECT MAX(s2.matchforeignkey)
FROM peoplematchesheroes s2
WHERE s1.personforeignkey = s2.personforeignkey)
注意:我知道这个查询效率很低,但我想在尝试优化之前理解相关子查询结构。
答案 0 :(得分:0)
s1和s2是 table aliases ,在这种情况下,两者都是同一个表'peoplematchesheroes'。 s1用作外部查询的别名,s2用作内部相关子查询的别名。
没有必要为相关子查询使用表别名,但在您的情况下,由于您的内部查询也引用与外部查询相同的表,因此您需要对它们进行别名。将其视为范围的解决方案,因为否则无法分辨您所指的“personforeignkey”字段 - 表中的相关子查询或外部子查询。
希望这是有道理的。