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

Jak vygenerovat pořadové číslo v pohledu MySQL?

Technicky chcete, aby něco takového simulovalo pořadí nebo číslo řádku..

CREATE VIEW table_view 
AS
 SELECT
  *
  , (@row_number := @row_number + 1) AS row_number 
 FROM 
  table
 # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results.
 ORDER BY
  table.column ASC 
CROSS JOIN (SELECT @row_number := 0) AS init_user_var  

Tento kód SQL nemůžete použít, pokud se pokusíte vytvořit pohled s uživatelskou proměnnou, zobrazí se níže uvedená chyba.

Error Code: 1351
View's SELECT contains a variable or parameter

Níže uvedený kód SQL také umožňuje vygenerovat číslo_řádku. To předpokládá, že máte sloupec id, který se generuje pomocí AUTO_INCREMENT. Poddotaz je však korelovaný poddotaz, díky čemuž je provádění u větších tabulek velmi pomalé, protože je třeba provést počítání. na každém záznamu.

CREATE VIEW table_view
AS
 SELECT 
  *
  , (SELECT COUNT(*) + 1 FROM table inner WHERE inner.id < outer.id) AS row_number
 FROM 
   table outer

Pouze MySQL 8.0+.

MySQL podporuje funkce okna, takže k simulaci pořadí nebo čísla řádku nejsou potřeba žádné uživatelské proměnné MySQL.

CREATE VIEW table_view 
AS
 SELECT
  *
 # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results.
  , (ROW_NUMBER() OVER (ORDER BY table.column ASC)) AS row_number
 FROM 
  table


  1. Jak dosáhnu toho, aby se kategorie první úrovně zobrazovala pouze jednou?

  2. Podmínka SQL ve funkci okna

  3. Pomocí spouštěče se ujistěte, že vložená data nepřekročí limit

  4. Co je jedinečné omezení v SQL Server - SQL Server / TSQL výukový program, část 95