Truy vấn tốt nhất giữa các đề tài này là gì? Chúng xuất kết quả tương tự, mong đợi một kết quả đang làm điều kiện bên trong một số where in
và một số khác bên trong một số inner join
.chọn tham gia bên trong (A, B) trên A và B so với vị trí (A, B) trong (A, B) trong mysql
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);
và
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 ;
Tôi đã tạo một sqlfiddle với một ví dụ: http://sqlfiddle.com/#!2/76001/62 (Ý tưởng là để có được phiên bản lớn nhất của một thực thể "bậc thầy" liên quan đến một người dùng nhất định)
Nếu bạn có ý tưởng khác (tôi đang sử dụng mysql, vì vậy tôi không thể sử dụng chức năng cửa sổ)
Cảm ơn
Nói chung, các giải pháp truy vấn con không tương quan như giải pháp thứ hai có xu hướng nhanh hơn các giải pháp thay thế của chúng. Truy vấn của bạn phức tạp hơn một chút, nhưng tôi nghĩ nguyên tắc nắm giữ. – Strawberry