Thomas Schmieder: Integritätsbruch finden in MySQL Version < 4.x

Hallo SQL-Spezialisten,

ich habe da ein Problem, dass ich nicht gelöst bekomme. Meine MySQL-Version 3.23.37-log kann noch keine geschachtelten Select-Anweisungen.

Wie kann ich trotzdem ausschließlich durch SQL-Abfrage Integritätsbrüche herausfinden?

Beispiel:

T_Kunde        T_RECH
---------      ------------
ID             ID
               ID_KUNDE

In Kunde sind nun nur die Datensätze

ID
-----
1
2
3
4

Und in Rechnung

ID     ID_KUNDE
-----------------
1         5
2         1
3         1
4         2
5         6
6         3
7         4

enthalten. Das bedeutet, dass Rechnung Nr. 1 und Nr. 5 keine Entsprechnung mehr in T_KUNDE haben. Wie kann ich abfragen, welche Datensätze in T_RECH _keinen_ Partner mehr in T_KUNDE finden?

Grüße

Tom

  1. Hi Tom

    Wie kann ich trotzdem ausschließlich durch SQL-Abfrage Integritätsbrüche herausfinden?

    Achtung ungetestet:

    Über einen Left outer join, da wo die rechte Seite null ist, fehlen
    die entsprechenden Partner. Wenn ein Partner existiert, kriegst du
    keine Zeile mit NULL auf der rechten Seite zurück.

    Mit rechte Seite meine ich, ein Feld aus der rechten Seite des Joins
    was als NOT NULL definiert ist, also keine NULLs von den Daten her
    zurückbringen kann.

    Gruss Daniela

    --
    Nein, wir frieren unsere Hühner nicht auf Gletschern fest.
    1. Hallo Daniela,

      freu mich, was von Dir zu lesen.

      Über einen Left outer join, da wo die rechte Seite null ist, fehlen
      die entsprechenden Partner. Wenn ein Partner existiert, kriegst du
      keine Zeile mit NULL auf der rechten Seite zurück.

      Da setzt jetzt das Gerübel ein, wie sowas aussieht. Was "linke" und was "rechte" Tabelle sind bekomm ich dank "Robin-Hood-Regel" noch hin. Die linke hat das Sagen und die rechte geht vor dem Pfeil...

      Aber wie ich das in einen "left outer join" zwinge, dafür reichts im Moment noch nicht.

      Ich blätter dann mal meine ganzen Bücher durch.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
      1. Hallo nochmal,

        Aber wie ich das in einen "left outer join" zwinge, dafür reichts im Moment noch nicht.

        Blättern hat sich gelohnt:

        select T_PERSON.* from T_PERSON
        left join T_NACHNAME on T_PERSON.ID_NACHNAME=T_NACHNAME.ID
        where T_NACHNAME.ID is NULL;

        So kann man alle Datensätze in der Tabelle T_PERSON finden, die keinen Partner in T_NACHNAME haben. Dank Deines Tipps (Daniela) mit Google unter http://www.little-idiot.de/mysql/mysql-118.html gefunden. Nun muss ich nur noch ein bisschen übern, damit ich die Syntax bzw. Semantik nirhc nur verstehe, sondern aus dem Kopf reproduzieren kann. Naja, das lohnt sich aber!

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  2. Hi Thomas,

    Wie kann ich trotzdem ausschließlich durch SQL-Abfrage Integritätsbrüche herausfinden?

    willst Du sie wirklich nur finden - nicht auch verhindern, daß überhaupt welche auftreten?
    (Stichwort: Constraints)

    Viele Grüße
          Michael

    --
    T'Pol: I apologize if I acted inappropriately.
    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
    1. Hi Michael,

      Wie kann ich trotzdem ausschließlich durch SQL-Abfrage Integritätsbrüche herausfinden?

      willst Du sie wirklich nur finden - nicht auch verhindern, daß überhaupt welche auftreten?
      (Stichwort: Constraints)

      Das wäre dann der nächste Schritt. Aber noch ist unsere Vorgangsbearbeitung nicht wasserdicht und da kann es schon passieren, dass sich jemand mitten in einem verketteten Vorgang einfach abseilt (den Browser schließt) und wir es nicht merken. Transaktiontracking fehlt eben noch.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.