Maison > base de données > tutoriel mysql > Comment puis-je récupérer les N premiers entiers positifs en utilisant uniquement une instruction SQL SELECT ?

Comment puis-je récupérer les N premiers entiers positifs en utilisant uniquement une instruction SQL SELECT ?

Mary-Kate Olsen
Libérer: 2024-12-19 11:38:09
original
602 Les gens l'ont consulté

How Can I Retrieve the First N Positive Integers Using Only a SQL SELECT Statement?

Récupération des N premiers entiers positifs à l'aide de SQL SELECT

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 :

  • Oracle :
SELECT  level
FROM    dual
CONNECT BY
        level <= 10
Copier après la connexion
  • SQL Serveur :
WITH    q AS
        (
        SELECT  1 AS num
        UNION ALL
        SELECT  num + 1
        FROM    q
        WHERE   num < 10
        )
SELECT  *
FROM    q
Copier après la connexion
  • PostgreSQL :
SELECT  num
FROM    generate_series(1, 10) num
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal