Except zwischen Tabellenspalte und harter Liste

rigger

Grünschnabel
So Hallo!

Folgende Situation:

Ich habe eine Liste auf Papier:
1
2
5
6 <--
7
10
(zum Beispiel)

und eine Tabelle mit einer Spalte namens "nr", in der die meisten der Nummern schon vorkommen und auch noch viele andere:
1
2
3
4
5
7
8
9
10

Jetzt brauche ich ein Statement, welches mir auch meiner harten Liste genau die Nummern ausspuckt, die nur da nicht aber in der DB vorkommen.

Meine Idee

<harte Liste> except select nr from tab

Jetzt muss aber leider links und rechts vom except ein select-Resultat stehen.... nicht gut weil die Liste die ich von Papier da hintippe keine Select-Resultat ist.

Nun können die Select-Befehle (Plural wegen variierender Implementierung) doch einiges wozu keine Tabelle nötig ist,
select 1+1 --> 2 aber das läuft normalerweise drauf raus, dass es sich um ein einzeiliges Ergebnis handelt.

Jetzt kommt der Punkt:

Wie kann ich ein Select-Statement bauen, in welches ich hart reinschreibe 1,2,3,4 und das mir ein Ergebnis in Form einer ein-spaltigen Auflistung der Zahlen zurückgibt?

Primär wichtig wäre die Lösung für MySql. Für verschiedene oder allgemein funktionierende Lösungen würde ich mich sehr interessieren!

Danke
Ben
 
Hallo,

naja ein wenig Aufwand musst du schon betreiben.

Du kannst mit der Pseudotabelle "dual" bzw. ganz ohne Tabellenname arbeiten (MySQL) und aus deinen feststehenden Zahlen mit UNION ALL Rows erzeugen.

Dann hast du verschiedene Möglichkeiten diese Rows gegen die Datensätze in deiner bestehenden Tabelle zu prüfen und nur die anzuzeigen, die in deiner feststehenden Liste existieren:

Ich habs im Beispiel mal mit einem LEFT-Join gemacht, ein RIGHT JOIN, ein NOT IN oder eine NOT EXISTS-Anweisung wären ebenfalls denkbar:

SQL:
select a.num from
  (select 1 as num UNION ALL
   select 2        UNION ALL
   select 3        UNION ALL
   select 4 ) as a
  left join tabelle t on (a.num = t.nr)
 where t.nr is null;

Markus
 
Zuletzt bearbeitet:
Zurück