這兩個之間的最佳查詢是什麼? 他們輸出相同的結果,期望一個人在where in
內部執行條件,另一個在inner join
內執行。內部聯接A和B上的選擇(A,B)vs mysql中選擇(A,B)中的(A,B)
select uv.* from version v inner join user_version uv ON v.id=uv.version_id
WHERE (v.number, v.master_id) IN (
select max(v.number) as number, v.master_id
from version v inner join user_version uv ON v.id=uv.version_id group by v.master_id);
和
select * from user_version uv
inner join version v on v.id=uv.version_id and v.number
inner join (
select uv2.user_id, max(v2.number) maxNumber, v2.master_id master_id, v2.id version_id from version v2
inner join user_version uv2 on v2.id=uv2.version_id group by v2.master_id) test
on test.master_id=v.master_id and test.maxNumber=v.number ;
我已經創建了一個例子的sqlfiddle:http://sqlfiddle.com/#!2/76001/62 (這樣做是爲了讓鏈接到特定用戶的「主」實體最大的版本)
如果您有其他的想法(我使用MySQL,所以我不能使用Windows功能)
感謝
一般而言,像第二個那樣的「不相關子查詢」解決方案往往比其他方案更快。你的查詢有點複雜,但我認爲這個原則是成立的。 – Strawberry