我在 MySQL 数据库中有一个表,其中有一个 UNIQUE INT(10) 列。该表非常填充,该行包含该列中整数的非连续条目。我想做一个查询,它会得到不在任何行中的最小数字(或 n 个最小数字)。
示例:该表包含列的值为 (1, 2, 3, 5, 7, 8, 10, 12, 15)
的行。 sql 语句应返回即五个最低的未包含值,在本例中为 4, 6, 9, 11, 13
。
这对 MySQL 来说可能吗?
最佳答案
您可以使用“数字”表(它对各种操作都很方便):
CREATE TABLE num
( i UNSIGNED INT NOT NULL
, PRIMARY KEY (i)
) ;
INSERT INTO num (i)
VALUES
(1), (2), ..., (1000000) ;
然后:
SELECT
num.i
FROM
num
LEFT JOIN
tableX AS t
ON num.i = t.columnX
WHERE
t.columnX IS NULL
ORDER BY
num.i
LIMIT 5
或:
SELECT
num.i
FROM
num
WHERE
NOT EXISTS
( SELECT *
FROM tableX AS t
WHERE num.i = t.columnX
)
ORDER BY
num.i
LIMIT 5
另一种不使用辅助表的方法是使用 MySQL 变量。你可以在SQL-Fiddle, test-2中测试.输出结果和之前的不太一样(只是为了说明可以搞定):
SELECT start_id, end_id
FROM
( SELECT
IF( t.columnX <> @id, @id, NULL) AS start_id
, IF( t.columnX <> @id, t.columnX-1, NULL) AS end_id
, @rows := @rows + (t.columnX - @id) AS r
, @id := t.columnX + 1 AS running_id
FROM
tableX AS t
CROSS JOIN
( SELECT @rows := 0
, @id := 1
) AS dummy
WHERE
@rows < 5
ORDER BY
t.columnX
) AS tmp
WHERE
start_id IS NOT NULL
关于mysql - 如何获取尚未在数据库列中的最小整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10103821/