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
655 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 :

1

2

3

4

SELECT  level

FROM    dual

CONNECT BY

        level <= 10

Copier après la connexion
  • SQL Serveur :

1

2

3

4

5

6

7

8

9

10

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 :

1

2

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 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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!

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