Maison >base de données >tutoriel mysql >Comment puis-je générer les N premiers entiers positifs avec une instruction SQL SELECT ?

Comment puis-je générer les N premiers entiers positifs avec une instruction SQL SELECT ?

DDD
DDDoriginal
2024-12-24 14:35:15340parcourir

How Can I Generate the First N Positive Integers with a SQL SELECT Statement?

Génération des N premiers entiers positifs à l'aide de SQL SELECT

Problème :

Obtention du premier N entiers positifs utilisant uniquement une instruction SQL SELECT standard a posé un défi. Existe-t-il une solution de contournement sans recourir à une table de comptage ?

Réponse :

Bien que le SQL général ne dispose pas d'une méthode native pour cette opération, plusieurs systèmes de bases de données majeurs proposent des solutions :

Oracle :

SELECT level
FROM dual
CONNECT BY level <= 10

SQL Serveur :

WITH q AS
(
SELECT 1 AS num
UNION ALL
SELECT num + 1
FROM q
WHERE num < 10
)
SELECT *
FROM q

PostgreSQL :

SELECT num
FROM generate_series(1, 10) num

MySQL :

Contrairement aux systèmes susmentionnés, MySQL ne dispose pas d'un mécanisme similaire. Pour contourner le problème, vous pouvez utiliser le script suivant pour créer une table temporaire et la remplir avec les nombres souhaités :

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
$$

Pour utiliser le script, appelez la procédure avec le nombre d'entiers souhaité :

CALL prc_filler(10);

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