Haymaker84 Geschrieben 14. Juli 2008 Teilen Geschrieben 14. Juli 2008 (bearbeitet) Hallo Leute, ich habe hier ein Problem, dass auf den ersten Blick (technisch!) nicht so schwer ist, ich habe nur keine Ahnung ob ich da jetzt Grundsätzlich falsch an die Sache rangehe... Also, es geht um 2 Tabellen: Tab1 ----- tab1regnr tab1lfdnr Tab2 ----- tab2regnr tab2lfdnr Der Join beider Tabellen funtzt über "tabXregnr" (bei beiden Tabellen FK). Die jeweils anderen Felder sind laufende Nummern. Bei "Tab2" werden der Reihe nach Datensätze eingefügt, d.h. die laufende Nummer geht immer weiter (1 - 2 - 3 - 4 usw.)... Bei Bedarf wird ne "Kopie" des Datensatzes unter "Tab1" gespiegelt. (Die Tabellen sind in der Realität umfangreicher, was aber hier nicht zur Sache zählt) Da es fehler beim Befüllen der Tabellen gab, soll ich nun Konsistenzprüfungen durchführen. Eine Prüfung davon ist, ob es unter "Tab1" Datensätze gibt bei denen zu einer "regnr" eine höhere "lfdnr" vergeben wurde, als diese in "Tab2" existiert. Beispiel: Tab2 -------- lfdnr regnr ---- ---- 1 234 2 456 3 678 Tab1 -------- lfdnr regnr ---- ---- 10 234 Durch den zu hohen Wert "10" ist natürlich eine Inkonsistenz vorhanden! Jetzt bin ich auch bald mit meinem Latein am Ende... Ich hab zwei versuche gestartet: 1. ---------- SELECT DISTINCT tab2.regnr FROM tab1 JOIN tab2 ON (tab1.regnr = tab2.regnr) WHERE (SELECT MAX(lfdnr) FROM tab1) > (SELECT COUNT(lfdnr) FROM tab2) GROUP BY m.regnr; 2. ---------- SELECT DISTINCT tab2.regnr FROM tab1 JOIN tab2 ON (tab1.regnr = tab2.regnr), (SELECT MAX(lfdnr) FROM tab1) max1, (SELECT COUNT(lfdnr) FROM tab2) max2 WHERE max1 > max2 GROUP BY m.regnr; Ich denke mein Hauptproblem ist, dass ich gerne MAX() und COUNT() für jede Teilergebnismenge vergleichen möchte (jeweils für eine "regnr"), bei meinem Ansatz jedoch immer der gesamte Bestand gezählt wird. Kann mir jemand helfen über den Tellerrand zu schauen?!?! :old Bearbeitet 14. Juli 2008 von Haymaker84 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 14. Juli 2008 Teilen Geschrieben 14. Juli 2008 Also wenn ich das richtig verstanden habe, dann möchtest Du sowas machen: SELECT tab2.regnr FROM tab1,tab2 WHERE tab1.regnr = tab2.regnr AND tab1.lfdnr > tab2.lfdnr Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Haymaker84 Geschrieben 15. Juli 2008 Autor Teilen Geschrieben 15. Juli 2008 naja, so simpel meinte ich es nicht. Aber tut mir leid, ich hab die Daten verfälscht wiedergegeben... So ist es eigentlich gemeint gewesen: Tab2 -------- lfdnr regnr ---- ---- 1 234 2 234 3 234 1 456 2 456 3 456 1 678 2 678 3 678 4 678 Tab1 -------- lfdnr regnr ---- ---- 10 234 1 456 3 678 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 15. Juli 2008 Teilen Geschrieben 15. Juli 2008 Du musst mit einem subselects musst die Daten einfach erst aufbereiten: SELECT tab2.regnr FROM tab1, (SELECT max(lfdnr)lfdnr,regnr FROM tab2 GROUP BY regnr)tab2 WHERE tab1.regnr = tab2.regnr AND tab1.lfdnr > tab2.lfdnr Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Haymaker84 Geschrieben 15. Juli 2008 Autor Teilen Geschrieben 15. Juli 2008 ahja, also kann ich in der From Klausel meinen Bestand näher definieren. Danke, das bringt mich der Lösung schon deutlich weiter! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.