La nécessité d'extraire les N premiers entiers positifs en utilisant uniquement une instruction SQL SELECT standard survient occasionnellement. Cependant, il est crucial de vérifier la faisabilité d'une telle requête sans table de comptage pré-remplie.
Approche SQL standard
Dans le domaine du SQL standard, récupérer directement un une série séquentielle d'entiers positifs sans table de comptage est irréalisable.
Spécifique à MySQL Solutions
MySQL ne dispose pas d'une fonction native pour générer des nombres séquentiels, mais il permet la création d'ensembles de lignes factices pour contourner cette limitation. Considérez les exemples suivants provenant de divers systèmes de gestion de bases de données :
SELECT level FROM dual CONNECT BY level <= 10
WITH q AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM q WHERE num < 10 ) SELECT * FROM q
SELECT num FROM generate_series(1, 10) num
Limites MySQL
Malheureusement, MySQL ne propose pas de fonction comparable, ce qui peut être considéré comme un inconvénient. Une solution de contournement peut consister à utiliser une procédure définie par l'utilisateur pour remplir une table temporaire avec le nombre de lignes souhaité, facilitant ainsi la récupération ultérieure. Par exemple :
CREATE TABLE filler ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ) ENGINE=Memory; CREATE PROCEDURE prc_filler(cnt INT) BEGIN DECLARE _cnt INT; SET _cnt = 1; WHILE _cnt <= cnt DO INSERT INTO filler SELECT _cnt; SET _cnt = _cnt + 1; END WHILE; END $$ CALL prc_filler(10); SELECT * FROM filler;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!