MySQL 5.1 - Suche nach Datensätzen die keinen Nachfolger haben

haugustin

Grünschnabel
Hallo,
ich betreue eine Datenbank deren Struktur ich nicht entworfen habe oder beeinflussen kann.
Daher mag meine Anfrage nach strikten Datenbankregeln Quatsch sein, aber ich kann es nicht ändern und hoffe auf Hilfe.

Vereinfachter Aufbau der Tabelle:

Vorgang, Nummer, Auftrag, Naechster1, Naechster2

Beispiel von Daten:
VorgangNummerAuftragNaechster1Naechster2
A101101R201
R201101G301
G301101R202
R202101

Also, über die Auftragsspalte ist definiert welche Vorgänge in einem Auftrag zusammengehören.
Über die Naechster1, Naechster2 Spalten ist eine Art Weiterleitung zum nächsten Vorgang innerhalb des Auftrags.
Über Vorgang und Nummer ist jeder Vorgang eindeutig identifizierbar (Primärschlüssel).
Nur der letze Vorgang hat dann keinen "Naechsten" mehr.

So ist das für hunderttausende Vorgänge und Aufträge strukturiert.

Es kann hier aber zu Datenfehlern kommen.
Dann sieht das z. B. so aus:

VorgangNummerAuftragNaechster1Naechster2
A101101R201
R201101G301
G301101
R202101

Der Fall stellt sich nun so dar, dass schon ab "G 301" diese Kette unterbrochen ist.
Es könnten da auch anstelle leere Felder falsche Nummern stehen.

Nun denke ich mir Folgendes:
Wenn ich abfrage, "Welche Kombination von Vorgang und Nummer, außer Vorgänge 'A', kommen innerhalb eines Auftrags vor die NICHT in der Liste von 'Naechster1, Naechster2' vermerkt sind?"

So müsste ich doch die bösen Buben ausfiltern können.
Reparatur ist dann Handarbeit für mir.

Wer kann mir mit dem SQL Statement helfen?

Herzlichen Dank!
 
SQL:
-- this entries are never beeing used as links whatsoever
select
  main.Vorgang, 
  main.Nummer, 
  main.Auftrag
from
  (select 
    Vorgang, 
    Nummer, 
    Auftrag
  from 
    test) main
left join
  (select 
    Naechster1, 
    Naechster2, 
    Auftrag
  from 
    test
  where
    Naechster1 is not null) next
on
  main.Vorgang = next.Naechster1
  and
  main.Nummer = next.Naechster2
  and
  main.Auftrag = next.Auftrag
where
  main.Vorgang != 'A'
  and
  next.Naechster1 is null ;

http://www.sqlfiddle.com/#!2/2dc1f/1
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück