Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (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 von Haymaker84
Geschrieben

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

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...