Quantcast
Viewing latest article 9
Browse Latest Browse All 10

Find all missing records

The easiest method is to use table with numbers. Here is example:

CREATE TABLE Foo (
 keycol INT NOT NULL PRIMARY KEY);
INSERT INTO Foo VALUES(1);
INSERT INTO Foo VALUES(5);
INSERT INTO Foo VALUES(8);
INSERT INTO Foo VALUES(9);
INSERT INTO Foo VALUES(11);
;WITH
N0 AS (SELECT 1 AS n UNION ALL SELECT 1), 
N1 AS (SELECT 1 AS n FROM N0 AS A, N0 AS B),
N2 AS (SELECT 1 AS n FROM N1 AS A, N1 AS B),
N3 AS (SELECT 1 AS n FROM N2 AS A, N2 AS B),
N4 AS (SELECT 1 AS n FROM N3 AS A, N3 AS B),
Nums AS (SELECT ROW_NUMBER() OVER(ORDER BY n) AS n FROM N4)
SELECT n AS missing_key_value FROM Nums
WHERE n BETWEEN 1 AND (SELECT MAX(keycol) FROM Foo)
EXCEPT
SELECT keycol FROM Foo;

/*

missing_key_value
--------------------
2
3
4
6
7
10

*/

Plamen Ratchev

Viewing latest article 9
Browse Latest Browse All 10

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>