Technisch gezien wil je zoiets om een rangorde of een rijnummer te simuleren.
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
U kunt deze SQL-code niet gebruiken, u krijgt de onderstaande foutmelding als u een View probeert te maken met een gebruikersvariabele.
Error Code: 1351
View's SELECT contains a variable or parameter
De onderstaande SQL-code maakt het ook mogelijk om het rijnummer te genereren. Dit veronderstelt dat je een id-kolom hebt die wordt gegenereerd met AUTO_INCREMENT. Maar de subquery is een gecorreleerde subquery wat de uitvoering erg traag maakt op grotere tabellen omdat het tellen moet worden uitgevoerd op elke plaat.
CREATE VIEW table_view
AS
SELECT
*
, (SELECT COUNT(*) + 1 FROM table inner WHERE inner.id < outer.id) AS row_number
FROM
table outer
Alleen MySQL 8.0+.
MySQL ondersteunt vensterfuncties, dus er zijn geen gebruikersvariabelen van MySQL nodig om een rangorde of een rijnummer te simuleren.
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