sql >> データベース >  >> RDS >> Mysql

MYSQL結合のネストされたSelectステートメント

    このタイプのクエリは、除外結合を使用して、別の方法で実行します。 サブクエリの代わりに。特定のIDの最大時間を持っているBの行を見つけたいと思います。つまり、他のどの行にも、より長い時間と同じIDがありません。

    SELECT A.*, B.*
    FROM A JOIN B ON B.ID = A.ID
    LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
    WHERE B2.ID IS NULL
    

    派生テーブルを使用することもできます 、相関サブクエリを使用するよりもパフォーマンスが向上するはずです。

    SELECT A.*, B.*
    FROM A JOIN B ON B.ID = A.ID
    JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
      ON (B.ID, B.Time) = (B2.ID, B2.Time)
    

    追伸:greatest-n-per-groupを追加しました 鬼ごっこ。このタイプのSQLの質問は、Stack Overflowで毎週発生するため、そのタグをたどると、同様の質問とその回答が多数表示されます。




    1. サーブレットを使用してpdfファイルをpostgresqlデータベースに保存するにはどうすればよいですか?

    2. SQLSTATE [42000]:構文エラーまたはアクセス違反:1055 SELECTリストの式#3がGROUP BY句に含まれておらず、非集計が含まれています

    3. dblinkを介したOracleSQLタイプ

    4. 再帰的なSELECTを支援する