我有一个表,其中 id 是设置了自动递增的主键列。它包含超过 10,00 行。
我需要获取所有已删除的主键。 喜欢
1 xcgh fct
2 xxml fcy
5 ccvb fcc
6 tylu cvn
9 vvbh cvv
我应该得到的结果是
3
4
7
8
目前我计算所有记录,然后在另一个表中插入(1 计数),然后我从该表中选择记录表中存在的 id。但是这种方法效率很低。我可以使用任何直接查询吗? 请指定为mysql。
最佳答案
参见 fiddle : http://sqlfiddle.com/#!2/edf67/4/0
CREATE TABLE SomeTable (
id INT PRIMARY KEY
, mVal VARCHAR(32)
);
INSERT INTO SomeTable
VALUES (1, 'xcgh fct'),
(2, 'xxml fcy'),
(5, 'ccvb fcc'),
(6, 'tylu cvn'),
(9, 'vvbh cvv');
set @rank = (Select max(ID)+1 from sometable);
create table CompleteIDs as (Select @rank :=@rank-1 as Rank
from sometable st1, sometable st2
where @rank >1);
SELECT CompleteIDs.Rank
FROM CompleteIDs
LEFT JOIN someTable S1
on CompleteIDs.Rank = S1.ID
WHERE S1.ID is null
order by CompleteIDs.rank
这里有一个假设。 someTable中的记录数* sometable中的记录数大于sometable中的最大ID。否则这不起作用。
关于mysql - 从自动增量主键中获取已删除主键的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19590248/