###前提・実現したいこと
MySQL初学者です。
相関サブクエリと親クエリで共通のJOIN処理を行っていますが、
ベタ書きのため恐らく2回テーブルの読み込み、JOINが走っているかと思います。
ここの読み込みを1度だけで同様の機能を実現できないでしょうか。
※真の目的は処理速度をなるべく早くすることです。レコード数10万件以上を想定しています。
###該当のソースコード
ランキングの処理です。テーブルAにスコアを保持しており、テーブルBの種別マスタに合うデータのみでランク付けをする想定です。
MySQL
1SELECT ( 2 SELECT count(*)+1 FROM テーブルA AS NO1 INNER JOIN テーブルB ON テーブルA.種別 = テーブルB.ID AND 条件 3 WHERE スコア > NO2.スコア) AS rank 4FROM テーブルA AS NO2 5INNER JOIN テーブルB ON テーブルA.種別 = テーブルB.ID AND 条件 6WHERE 最終条件
###試したこと
「FROM NO1」や「FROM NO2」は相関クエリのためかうまくいきませんでした。
一時テーブルにJOIN後のテーブルを格納する方法も試してみましたが、処理速度が遅くダメでした。
###追記 No1
SQL文少し書き間違ってますね(メインのテーブルB⇒テーブルA)
仰る通りです。書き写しにミスがありましたので、修正しました。
またテーブルのサンプルを連携します。
テーブルA ID ユーザーID 種別ID スコア PK UK UK idx テーブルB ID 種類ID 外部連携用ID PK UK UK
情報は絞っていますがおおよそ上記のような感じで、UKは複合UKです。
JOINの条件としてテーブルBのUKを使い、最終条件で特定のユーザーIDのランキングを取得する想定です。
よろしくお願い致します。
###追記No2
丸投げの割に提示する情報が少ないですね。追記されたサンプルではどういったデータ群からどういった結果を導きたいのか類推できません。
失礼しました。まだまだSQLは勉強不足で、どういう情報が必要なのかわかっていないのです。。もう少し情報を追記してみます。
テーブルA:ユーザー毎のスコアを管理
テーブルB:ゲームの種別マスタ(じゃんけん、クイズ、など)
じゃんけんやクイズに関するスコアがテーブルAで管理されており、ランキングを取得する際は
・ユーザーID
・ゲーム種別
を指定することで、そのゲーム種別のスコアからランキングを取得したく思っております。
回答1件
あなたの回答
tips
プレビュー