I need to get a result set containing the first N positive integers. Is it possible to use only standard SQL SELECT statement to get them (without any count table provided)?
If it's not possible, is there any specific MySQL way to achieve this?
SQL requires that you name the columns you want, or else use the * wildcard. In relational theory, there is no concept of "first N columns" because columns have no implicit order.
To return only the first row that matches your SELECT query, you need to add the LIMIT clause to your SELECT statement. The LIMIT clause is used to control the number of rows returned by your query.
ROW_NUMBER (Window Function) ROW_NUMBER (Window Function) is a standard way of selecting the nth row of a table. It is supported by all the major databases like MySQL, SQL Server, Oracle, PostgreSQL, SQLite, etc.
Seems that what you want is a dummy rowset
.
In MySQL
, it's impossible without having a table.
Most major systems provide a way to do it:
In Oracle
:
SELECT level
FROM dual
CONNECT BY
level <= 10
In SQL Server
:
WITH q AS
(
SELECT 1 AS num
UNION ALL
SELECT num + 1
FROM q
WHERE num < 10
)
SELECT *
FROM q
In PostgreSQL
:
SELECT num
FROM generate_series(1, 10) num
MySQL
lacks something like this and this is a serious drawback.
I wrote a simple script to generate test data for the sample tables in my blog posts, maybe it will be of use:
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
$$
You call the procedure and the table gets filled with the numbers.
You can reuse it during the duration of the session.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With