SQL Teilmenge anziehen

fuzzycontrol

Mitglied
Hallo liebes Forum,

ich habe folgendes SQL-Problem:

Ich habe eine Table test mit einer Spalte id
Dort stehen nacheinander Einträge drin, also z.b. (1,2,3,5,6,8,9)
Es fehlen also zwischendurch Einträge.
Welche da fehlen, muss ich herausbekommen. Ich weiß das die "komplette" Menge z.B. so aussieht (1,2,3,4,5,6,7,8,9)

Rein naiv würde ich die SQL so bauen:
Select id from test
where (1,2,3,4,5,6,7,8,9) not in id

Geht natürlich nicht drückt aber ganz gut aus was ich brauche

Als Ergebnismenge sollte dann in diesem Beispiel rauskommen:
(4,7)
 

fuzzycontrol

Mitglied
war natürlich auch mein erster gedanke, aber das liefert nur ein leeres Ergebnis, weil ja die Menge in id per Definition eine Teilmenge von der Menge in () ist
 

parabool

Bekanntes Mitglied
Wenn eine (Nachschlage) Tabelle angelegt wird, wo alle möglichen id's verzeichnet sind,
würde folgendes gehen:

SQL:
SELECT id FROM lockup_table where id not in (select id from test) ;
 

fuzzycontrol

Mitglied
danke für die Antworten leider ist da noch nicht was praktikables dabei.

Die Nachschlage-Menge muss keine durchgehende Sequenz sein, sondern kann z.B. auch Strings bestehen.

Aus der Nachschlage-Menge eine Tabelle zu machen wird schwierig, weil es in einem Statement passieren muss.

So wie es aussieht gibts wohl doch keine "elegante" Lösung. Schade.
 

fuzzycontrol

Mitglied
Also ich hab eine Liste in der Tabelle die potientiell unvollständig ist und eine vollständige Liste "im Kopf" und ich suche nun die Entries aus der vollständigen Liste die nicht mit in der Tabelle stehen
 

parabool

Bekanntes Mitglied
Auf Teufel komm raus: :D
SQL:
SELECT lookup.id from (SELEKT 1 as id union selekt 2 as id union selekt 3 as id) as lookup where id not in (SELECT id  FROM test);
Du musst die selects die per union die Lookup-Table bilden, programmatisch generieren.

(Select mit k weil sonst Beitrag nicht abgeschickt wurde *verwirrt*)
 
Zuletzt bearbeitet:
G

Gast2

Gast
Um welches RDBMS geht es? In Oracle könnte man mit PLSQL Tables arbeiten und das ganze als Block in der Datenbank laufen lassen. Wird denke ich mal so auch in anderen RDBMS gehen, dann ist allerdings die Syntax entscheidend...
 

parabool

Bekanntes Mitglied
Um bei den Bsp. der kompletten Menge von 1 bis 9 zu bleiben:
SQL:
(selekt 1 AS id UNION selekt 2 AS id UNION selekt 3 AS id ...usw... UNION selekt 9 AS id)

wird natürlich bei grossen Mengen...ging nur um Machbarkeit.
 
Zuletzt bearbeitet:

Neue Themen


Oben