68 Stimmen

Generierung eines Zahlenbereichs in MySQL

Wie generiere ich einen Bereich von aufeinanderfolgenden Zahlen (eine pro Zeile) aus einer MySQL-Abfrage, so dass ich sie in eine Tabelle einfügen kann?

Zum Beispiel:

nr
1
2
3
4
5

Ich möchte dafür nur MySQL verwenden (nicht PHP oder andere Sprachen).

0 Stimmen

Möchten Sie dies zu bestehenden Datensätzen oder zu einer völlig neuen Tabelle hinzufügen?

1 Stimmen

Warum können Sie keine auto_increment-Spalte verwenden?

5voto

Tomalak Punkte 320467
DECLARE i INT DEFAULT 0;

WHILE i < 6 DO
  /* insert into table... */
  SET i = i + 1;
END WHILE;

4voto

Naresh Punkte 11

Mit rekursivem cte..

  with recursive rnums as (
  select 1 as n
      union all
  select n+1 as n from rnums
      where n <10
  )
  select * from rnums
  ;

Das Ergebnis wäre +------+ | n | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +------+ 10 Zeilen im Satz (0.00 sec)

4voto

Brad Rhoads Punkte 1748

In MariaDB können Sie das tun:

SELECT * FROM seq_i_to_N

Zum Beispiel:

SELECT * FROM seq_0_bis_1000

SELECT * FROM seq_1_bis_1000000

Referenz: https://www.percona.com/blog/2020/07/27/generating-numeric-sequences-in-mysql/

3voto

elyalvarado Punkte 1138

Sehr ähnlich wie die akzeptierte Antwort, aber unter Verwendung des neuen WITH Syntax für mysql >= 8.0, die viel besser lesbar ist und auch die Absicht klarer macht

WITH DIGITS (N) AS (
  SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL
  SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL
  SELECT 8 UNION ALL SELECT 9)
SELECT 
  UNITS.N + TENS.N*10 + HUNDREDS.N*100 + THOUSANDS.N*1000 
FROM 
  DIGITS AS UNITS, DIGITS AS TENS, DIGITS AS HUNDREDS, DIGITS AS THOUSANDS;

3voto

Liam Punkte 4366

Hier ist ein Weg, es mit json_table zu tun, wenn Sie MySql 8 und höher haben:

set @noRows = 100;
SELECT tt.rowid - 1 AS value
  FROM JSON_TABLE(CONCAT('[{}', REPEAT(',{}', @noRows - 1), ']'),
                  "$[*]" COLUMNS(rowid FOR ORDINALITY)
       ) AS tt; 

(h/t - https://www.percona.com/blog/2020/07/27/generating-numeric-sequences-in-mysql/ )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X