假設(shè)有一個(gè)表sequence,包含了0到99的數(shù)字,其中有一個(gè)數(shù)字是缺失的。要找到這個(gè)缺失的數(shù)字,可以使用如下SQL語(yǔ)句:
SELECT a.id+1 AS missing_number
FROM sequence AS a
LEFT OUTER JOIN sequence AS b ON a.id+1 = b.id
WHERE b.id IS NULL
AND a.id < 99;
解釋如下:
- 通過(guò)LEFT OUTER JOIN實(shí)現(xiàn)了表本身的自連接,將自連接的結(jié)果集返回;
- 將左表的id值加1后,與右表的id值進(jìn)行比較,如果相等則說(shuō)明該數(shù)字不缺失,否則說(shuō)明該數(shù)字是缺失的;
- WHERE b.id IS NULL表示只返回右表中缺失的數(shù)字;
- a.id < 99用于過(guò)濾掉最后一個(gè)數(shù)字,因?yàn)樽詈笠粋€(gè)數(shù)字后面沒(méi)有數(shù)字了,不存在缺失的情況。