に選択(A、B)にAの(A、B)を選択し、B(A、B)対をインナーに参加しますか? 同じ結果を出力します.1つはwhere in
の中で条件を実行し、もう1つはinner join
の中にあるとします。は間の最良のクエリが2の学位論文は何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);
と
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を使用しています)他のアイデアを持っている場合
、第二のような「非相関サブクエリのソリューションはその代替案よりも速くなる傾向があります。あなたの質問はもう少し複雑ですが、私はその原則が成立していると思います。 – Strawberry