1

こちらで質問するのは初めてです。学習にとても役立ちました。

テーブルを選択しようとして、別のテーブルの特定のグループの最大値を持つ行のみを取得しています。非常に近いが完全ではない最良の答えの1つはこれです(SQLは列に最大値を持つ行のみを選択します)が、単一のテーブルにのみ関連しています。複数のテーブルを持つ他の人を見つけましたが、正確に使用する方法がわかりません。

私は(簡略化された)のテーブルを持っています

prodID, quantity, mach, etc

私はそれからテーブルを持っています

prodStatusID, prodID, userID, subStatusID

サブステータス名を含む最後のテーブル

subStatusID, subStatusName

最初のテーブルと 2 番目のテーブルのすべてを含むテーブルを取得しようとしていますが、最大のステータス番号を持ち、正しいステータス名を含む行のみを取得しようとしています。
私のもう 1 つの懸念は、今は問題にならないかもしれませんが、1 年か 2 年後に、このことが実際にいっぱいになり始めるときのパフォーマンスです。select の中に select を入れるのが悪いとは思いませんが、すべてのプロダクションを返そうとすると、すべてのプロダクションに対してクエリを実行することになります。

より明確にするために。2 番目のテーブル prodStatus には、prodID が 4 の行が 2 つある可能性がありますが、最初の行の subStatusID は 1 で、2 番目の行は 2 になります。ユーザー ID は異なります。取得したいのは 2 番目の行だけです。2 番目の行には最大のステータス番号があり、その行に関連付けられた userID と statusName が必要だからです。

この回答を得るために 2 日間グーグルで検索しましたが、オークションについて 1 を見ましたが、調査しても完全には理解できません。

4

1 に答える 1

1

subStatusID各の最大値を取得するサブクエリを作成する必要がありますprodID

SELECT  a.*,     -- select only columns that you want to show
        c.*,     -- asterisks means all columns
        d.*
FROM    table1 a
        INNER JOIN
        (
            SELECT prodID, max(subStatusID) maxID
            FROM table2
            GROUP BY prodID
        ) b ON a.prodID = b.prodID 
        INNER JOIN  table2 c
            ON b.prodID = c.prodID AND
                b.maxID = c.subStatusID
        INNER JOIN table3 d
            ON c.subStatusID = d.subStatusID
于 2012-10-18T04:26:45.033 に答える