sql >> Databáze >  >> RDS >> Mysql

Jak zkontrolovat, zda je aktuální řádek posledním vybraným řádkem v dotazu SQL?

  1. Musíte zadat ORDER BY definovat nějaké řazení řádků.
  2. Domnívám se, že jakékoli řešení pro MySQL by efektivně znamenalo, že se váš dotaz provede alespoň dvakrát, takže je opravdu lepší to udělat na klientovi.

Pokud souhlasíte se spuštěním stejného dotazu dvakrát, udělejte něco takového.

Nejprve získejte ID posledního řádku:

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

Použijte toto ID v hlavním dotazu:

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

S největší pravděpodobností dojde k přerušení, pokud je tabulka aktualizována během těchto dvou dotazů (zapamatované ID se nemusí stát posledním, pokud jsou přidány nebo odstraněny řádky, pokud neuděláte něco pro vyřešení tohoto problému).

Samozřejmě můžete vše vložit do jednoho dotazu:

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;

Musíte zkontrolovat, zda je MySQL dostatečně inteligentní, aby spustilo vnitřní SELECT LIMIT 1 pouze jednou nebo jej spustí pro každý řádek hlavní tabulky. I v tom nejlepším případě je dotaz efektivně proveden dvakrát.



  1. Jak úplně odstranit MySQL pomocí konfiguračních a knihovních souborů?

  2. Chyba SQL:ORA-02000:chybí klíčové slovo ALWAYS při vytváření tabulky založené na sloupcích identity

  3. Přepněte z JsonStringType na JsonBinaryType, když projekt používá MySQL i PostgreSQL

  4. Relace serveru ORACLE byla ukončena závažnou chybou