一條SQL:補充缺失的最小ID
ITPUB上碰到一個問題,覺得有點意思,順便就在部落格把解決思路列了下來。
原問題:
面試遇到一條SQL題,查詢被刪除的ID
大概意思是,有一張業務表,欄位ID為關鍵字標識每一張業務單,ID資料型別為int,正常情況下,每增加一條記錄,ID值增加1。
當表中某些記錄被刪除後,ID就會存在斷裂;如:表中原來10條記錄,當2,4,6 被刪除後,表中的內容如下:
—————————
| ID |
—————————
| 1 |
—————————
| 3 |
—————————
| 5 |
—————————
| 7 |
—————————
| 8 |
—————————
| 9 |
—————————
| 10 |
—————————
增加記錄時,查詢ID沒有被使用最小值,上例的查詢結果應該為2。
這個SQL如何寫呢?
個人解決思路如下:
建立測試表:
create table t (n number);
insert into t values(1);
insert into t values(3);
insert into t values(5);
insert into t values(7);
insert into t values(8);
insert into t values(9);
insert into t values(10);
commit;
select * from t;
SQL寫法如下:
with s as (
select 0 n,1 m from dual –建立connect by的初始源
union
select n,n+1 m from t –取出t表的下一ID
),
r as (
select s.*,level from s
start with n=0 –從0開始connect by,出現斷層,即所需的ID號
connect by n=prior m )
select max(n)+1 from r;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10009036/viewspace-1061457/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 最小缺失值問題MySql
- mysql刪除重複記錄,儲存Id最小的一條MySql
- PS的一些補充
- Java 缺失的特性:擴充套件方法Java套件
- 常規sql的使用總結(陸續補充)SQL
- MybatisPlus的一些補充MyBatis
- 最全的IDEA快捷鍵, 歡迎補充Idea
- [20211011]計算sql_id.sh指令碼的一些補充.txtSQL指令碼
- 檢視SQL執行計劃的方法(有待於進一步補充)SQL
- [20170916]sqlplus set array最小2補充.txtSQL
- Java的一些基礎補充Java
- KeyShot操作的一些補充
- Spring註解補充(一)Spring
- 一條SQL的改寫SQL
- IDA靜態逆向分析模型原理的補充模型
- Python的一些進階補充Python
- SQL 獲取插入後的最新一條記錄ID號SQL
- 如何分析一條sql的效能SQL
- 一條大sql的調優SQL
- python時間序列缺失值補零Python
- Oracle 12c裡的幾點補充(一)Oracle
- Git——關於Git的一些補充(1)Git
- 有關元件的補充~~~~~~~元件
- iOS-framework的補充iOSFramework
- vi的補充學習
- Android SQL,你用對了嗎(一)——條件限定AndroidSQL
- SQL的order by 高階使用·指定一條資訊排列第一條SQL
- 如何應對缺失值帶來的分佈變化?探索填充缺失值的最佳插補演算法演算法
- JVM補充篇JVM
- 聯通性補充
- 一條Sql的執行過程SQL
- 一條更新sql的執行之路SQL
- 一條sql的優化過程SQL優化
- 一條SQL語句的書寫SQL
- 一條很 巧妙的 SQL 語句SQL
- 一條sql語句的優化SQL優化
- 一條SQL語句的旅行之路SQL
- mybatis條件判斷及動態sql的簡單擴充MyBatisSQL