2013-09-28 56 views
0

我建立this MySQL doc page,我通過this StackOverflow question.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) 

注:據我所知,這個查詢是低效的,但我想了解相關,子查詢施工前我嘗試優化。

回答

0

s1和s2是table aliases,在這種情況下,對於同一個表'peoplematchesheroes'。 s1用作外部查詢的別名,s2用於內部相關子查詢。

沒有必要爲相關的子查詢使用表別名,但就您的情況而言,由於您的內部查詢也是指與外部查詢相同的表,因此您需要爲它們加上別名。把它看作是一個範圍的解決方案,因爲否則就不可能告訴你指的是哪個'personforeignkey'字段 - 來自表格相關的子查詢或來自外部的那個字段。

希望這是有道理的。