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

現在の行がSQLクエリで最後に選択された行であるかどうかを確認するにはどうすればよいですか?

    1. ORDER BYを指定する必要があります 行の並べ替えを定義します。
    2. MySQLのソリューションは、クエリが少なくとも2回実行されることを効果的に意味すると思います。したがって、クライアントで実行する方が非常に優れています。

    同じクエリを2回実行しても問題がない場合は、次のようにします。

    最初に最後の行のIDを取得します:

    SELECT @LastID := ID 
    FROM ... 
    WHERE ... 
    GROUP BY ...
    ORDER BY ID DESC
    LIMIT 1;
    

    メインクエリでそのIDを使用します:

    SELECT * 
        , CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
    FROM ... 
    WHERE ... 
    GROUP BY ...
    ORDER BY ID ASC;
    

    現状では、これら2つのクエリの実行中にテーブルが更新されると、破損する可能性があります(この問題に対処するために何かを行わない限り、行が追加または削除された場合、記憶されたIDが最後のIDにならない可能性があります)。

    もちろん、すべてを1つのクエリにまとめることができます:

    SELECT 
        *, 
        CASE WHEN ID = LastID THEN FALSE ELSE TRUE END AS IsLast
    FROM 
        YourTable
        CROSS JOIN 
        (
            SELECT ID AS LastID
            FROM YourTable
            ORDER BY ID DESC
            LIMIT 1
        ) AS TableLastID
    ORDER BY ID ASC;
    

    MySQLが内部のSELECT LIMIT 1を実行するのに十分スマートであるかどうかを確認する必要があります 一度だけ、またはメインテーブルのすべての行に対して実行されます。それでも、最良の場合でも、クエリは効果的に2回実行されます。



    1. SQLを使用して実行可能コードをテーブルレコードに保存することは可能ですか?

    2. PostgreSQL:条件が真になるまでループする

    3. 透過的なデータ暗号化と常に暗号化

    4. clojure.java.jdbcを使用してファイルからロードSQLステートメントにパッチを適用することは可能ですか?