第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL:在表中查找丟失的ID

SQL:在表中查找丟失的ID

森欄 2019-10-18 10:51:09
我的表具有唯一的自動增量主鍵。隨著時間的流逝,條目可能會從表中刪除,因此此字段的值中存在“漏洞”。例如,表數(shù)據(jù)可能如下: ID  | Value    | More fields...--------------------------------- 2   | Cat      | ...  3   | Fish     | ... 6   | Dog      | ... 7   | Aardvark | ... 9   | Owl      | ... 10  | Pig      | ... 11  | Badger   | ... 15  | Mongoose | ... 19  | Ferret   | ...我對查詢將返回表中缺少的ID的列表感興趣。對于以上數(shù)據(jù),預期結果為: ID ---- 1 4 5 8 12 13 14 16 17 18筆記:假設最初的第一個ID為1應該檢查的最大ID是最后一個ID,即可以假設當前的最后一個ID之后沒有其他條目(請參閱以下有關這一點的其他數(shù)據(jù))上述要求的缺點是該列表將不會返回ID 19之后創(chuàng)建的ID和已刪除的ID。我目前正在用代碼解決這種情況,因為我持有創(chuàng)建的最大ID。但是,如果查詢可以將MaxID作為參數(shù),并且還返回當前max和MaxID之間的那些ID,那將是一個不錯的“獎勵”(但肯定不是必須的)。我目前正在使用MySQL,但是考慮遷移到SQL Server,因此我希望查詢能夠同時適合這兩者。另外,如果您使用的是無法在SQLite上運行的工具,請多謝。
查看完整描述

3 回答

?
12345678_0001

TA貢獻1802條經(jīng)驗 獲得超5個贊

這個問題經(jīng)常出現(xiàn),可悲的是,最常見(也是最可移植的)答案是創(chuàng)建一個臨時表來保存應該存在的ID ,然后進行左聯(lián)接。MySQL和SQL Server之間的語法非常相似。唯一真正的區(qū)別是臨時表語法。


在MySQL中:


declare @id int

declare @maxid int


set @id = 1

select @maxid = max(id) from tbl


create temporary table IDSeq

(

    id int

)


while @id < @maxid

begin

    insert into IDSeq values(@id)


    set @id = @id + 1

end


select 

    s.id 

from 

    idseq s 

    left join tbl t on 

        s.id = t.id 

 where t.id is null


 drop table IDSeq

在SQL Server中:


declare @id int

declare @maxid int


set @id = 1

select @maxid = max(id) from tbl


create table #IDSeq

(

    id int

)


while @id < @maxid --whatever you max is

begin

    insert into #IDSeq values(@id)


    set @id = @id + 1

end


select 

    s.id 

from 

    #idseq s 

    left join tbl t on 

        s.id = t.id 

 where t.id is null


 drop table #IDSeq


查看完整回答
反對 回復 2019-10-18
?
炎炎設計

TA貢獻1808條經(jīng)驗 獲得超4個贊

我登陸此頁面希望找到SQLITE的解決方案,因為這是我在搜索相同問題的SQLITE時找到的唯一答案。


我找到的最終解決方案是來自本文的 浮動中間博客-SQLITE答案


希望它可以幫助別人:-)


簡單的解決方案是:


SELECT DISTINCT id +1

FROM mytable

WHERE id + 1 NOT IN (SELECT DISTINCT id FROM mytable);

天才。


查看完整回答
反對 回復 2019-10-18
  • 3 回答
  • 0 關注
  • 669 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號