Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zeilenrang in einer MySQL-Ansicht

Verwendung:

SELECT t.id,
       t.variety,
       (SELECT COUNT(*) FROM TABLE WHERE id < t.id) +1 AS NUM
  FROM TABLE t

Dies ist nicht ideal, da die Abfrage nach dem num-Wert für jede zurückgegebene Zeile ausgeführt wird. Eine bessere Idee wäre, einen NUMBERS zu erstellen Tabelle, mit einer einzelnen Spalte, die eine Zahl enthält, die bei Eins beginnt und sich zu einer unverschämt großen Zahl erhöht, und dann die NUMBERS verbindet und darauf verweist Tabelle auf ähnliche Weise wie im folgenden Variablenbeispiel.

MySQL-Ranking oder dessen Fehlen

Sie können eine Variable definieren, um Pseudo-Zeilennummer-Funktionalität zu erhalten, da MySQL keine Ranking-Funktionen hat:

SELECT t.id,
       t.variety,
       @rownum := @rownum + 1 AS num
  FROM TABLE t,
       (SELECT @rownum := 0) r
  • Der SELECT @rownum := 0 definiert die Variable und setzt sie auf Null.
  • Das r ist ein Unterabfrage-/Tabellen-Alias, da Sie in MySQL einen Fehler erhalten, wenn Sie keinen Alias ​​für eine Unterabfrage definieren, auch wenn Sie ihn nicht verwenden.

Eine Variable kann in einer MySQL-Ansicht nicht verwendet werden

Wenn Sie dies tun, erhalten Sie den Fehler 1351, weil Sie können aufgrund des Designs keine Variable in einer Ansicht verwenden . Das Bug-/Feature-Verhalten ist hier dokumentiert .