,同時爲我們的本地文件存檔實施內嵌搜索功能我已經想出了一個嚴重的問題,我找不到答案。我們有兩個表:如何根據max()值加入兩個MySQL表格
fild_id | file_name --------------------- 1 | this_file 2 | that_file 3 | new_file file_archive_id | file_archive_version | file_id -------------------------------------------------- 1 | 1 | 1 2 | 2 | 1 3 | 1 | 2 4 | 1 | 3 5 | 3 | 1
我想加入通過file_id的兩個表,只選擇一個file_archive一行最大的file_archive_version:
fild_id | file_name | file_archive_id | file_archive_version -------------------------------------------------------------- 1 | this_file | 5 | 3 2 | that_file | 3 | 1 3 | new_file | 4 | 1
是否有可能通過一個單一的選擇要做到這一點聲明?
解決方案:具有〜16K行
SELECT df.*, ( SELECT dfa.file_archive_id FROM dca_file_archive dfa WHERE df.file_id = dfa.file_id ORDER BY dfa.file_archive_version desc LIMIT 1 ) as file_archive_id, ( SELECT dfa.file_archive_version FROM dca_file_archive dfa WHERE df.file_id = dfa.file_id ORDER BY dfa.file_archive_version desc LIMIT 1 ) as file_archive_version FROM dca_file df
這兩個表,該語句採用0.9秒執行,這比第一溶液加入120X更快。
重複的http://stackoverflow.com/questions/2181043/mysql-like-a-join-but-only-need-the-newest -row –
不重複。這一個更復雜,因爲整行是想要的,而不僅僅是MAX() - 值... –
它只是部分重複,但因爲我剛剛得知可以用select語句替代一個新列,我可以只需加倍額外的選擇語句,這比其他版本快得多。 不過,這不是有史以來最快的(; – mo0h