我需要得到一个包含前N个正整数的结果集.是否可以仅使用标准SQL SELECT语句来获取它们(不提供任何计数表)?
如果不可能,是否有任何特定的MySQL方法来实现这一目标?
Qua*_*noi 17
似乎你想要的是一个dummy rowset.
在MySQL没有桌子的情况下,这是不可能的.
大多数主要系统提供了一种方法:
在Oracle:
SELECT level
FROM dual
CONNECT BY
level <= 10
Run Code Online (Sandbox Code Playgroud)在SQL Server:
WITH q AS
(
SELECT 1 AS num
UNION ALL
SELECT num + 1
FROM q
WHERE num < 10
)
SELECT *
FROM q
Run Code Online (Sandbox Code Playgroud)在PostgreSQL:
SELECT num
FROM generate_series(1, 10) num
Run Code Online (Sandbox Code Playgroud)MySQL 缺乏这样的东西,这是一个严重的缺点.
我写了一个简单的脚本来为我的博客文章中的示例表生成测试数据,也许它会有用:
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
$$
Run Code Online (Sandbox Code Playgroud)
您调用该过程并且表格中填充了数字.
您可以在会话期间重复使用它.
小智 10
一种可能的解决方案(当然不是很优雅)是使用任何具有足够大量记录的表.
对于前10个整数(使用mysql.help_relation,但任何表都可以),您可以使用以下查询:
SELECT @N := @N +1 AS integers
FROM mysql.help_relation , (SELECT @N:=0) dum LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
这也可以放在Min和Max的函数中.