Wie finde ich verpasste IDs in meiner Tabelle? jetzt zum Beispiel ids sindWie finde ich verpasste IDs in meiner Tabelle?
1
3
8
mein Ziel ist es verfehlte Werte
2
4
5
6
7
Wie finde ich verpasste IDs in meiner Tabelle? jetzt zum Beispiel ids sindWie finde ich verpasste IDs in meiner Tabelle?
1
3
8
mein Ziel ist es verfehlte Werte
2
4
5
6
7
SELECT s.v from generate_series(1, (select max(id) from your_table)) s(v)
left join your_table
on s.v = your_table.id
WHERE your_table.id IS NULL
Siehe generate_series(start, stop) Funktion finden. Just LEFT JOIN
die Serie mit Ihrem id
s, um die fehlenden zu bekommen.
Oder nur EXCEPT
Betreiber
SELECT
generate_series(1, MAX(id)) AS id
FROM
the_table
EXCEPT
SELECT
id
FROM
the_table
Artgründen verwenden, führt dies auch zu einer anti-join (like @Oto Shavadze's answer). Sie können wählen, welchen Stil Sie mehr mögen. NOT EXISTS
sollte bevorzugt werden, wo anwendbar, da
NOT EXISTS
ist explizit, dass. Ein linker Join kann den Satz vergrößern.inner.id = outer.id
von der Klausel abweichen kann.ist ein Beispiel,
SELECT s.v
FROM generate_series(1, (SELECT max(id) FROM yourTable))
AS s(v)
WHERE NOT EXISTS (
SELECT 1
FROM yourTable
WHERE s.v = id
);
'NICHT EXISTS' Reiniger hier ist, aber letztlich hat es die gleiche Sache. 'SELECT sv aus generate_series (1, (wählen Sie max (id) aus Ihrer_Tabelle)) s (v) WO NICHT EXISTEN (SELECT 1 FROM your_table WHERE sv = id)' –
@EvanCarroll - für mich persönlich, finden Sie Werte von "a" welche nicht in "b" sind, LEFT JOIN mit IS NULL ist sauberer. –
Du bist einzigartig. =) Das 'NOT EXISTS' ist ziemlich semantisch und seine Bedingungen sind enthalten. –