select name,
@rownum := @rownum + 1 as row_number
from your_table
cross join (select @rownum := 0) r
order by name
Esta parte:
cross join (select @rownum := 0) r
torna possível introduzir uma variável sem a necessidade de uma consulta separada. Portanto, a primeira consulta também pode ser dividida em duas consultas como esta:
set @rownum := 0;
select name,
@rownum := @rownum + 1 as row_number
from your_table
order by name;
por exemplo, quando usado em um procedimento armazenado.