Använd:
SELECT t.id,
t.variety,
(SELECT COUNT(*) FROM TABLE WHERE id < t.id) +1 AS NUM
FROM TABLE t
Det är inte ett idealiskt sätt att göra detta, eftersom frågan för num-värdet kommer att köras för varje rad som returneras. En bättre idé skulle vara att skapa en NUMBERS
tabell, med en enda kolumn som innehåller ett nummer som börjar på ett som ökar till ett oerhört stort antal, och sedan gå med och referera till NUMBERS
tabell på ett sätt som liknar variabelexemplet som följer.
MySQL-rankning, eller brist på sådan
Du kan definiera en variabel för att få psuedo radnummerfunktionalitet, eftersom MySQL inte har några rankningsfunktioner:
SELECT t.id,
t.variety,
@rownum := @rownum + 1 AS num
FROM TABLE t,
(SELECT @rownum := 0) r
-
SELECT @rownum := 0
definierar variabeln och ställer in den på noll. r
är en underfråga/tabellalias, eftersom du får ett felmeddelande i MySQL om du inte definierar ett alias för en underfråga, även om du inte använder det.
Kan inte använda en variabel i en MySQL-vy
Om du gör det får du 1351-felet eftersom du kan inte använda en variabel i en vy på grund av design . bugg-/funktionsbeteende dokumenteras här .