Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

SQL: Zählwerte tabellenübergreifend vergleichen

Empfohlene Antworten

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

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

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

ahja, also kann ich in der From Klausel meinen Bestand näher definieren.

Danke, das bringt mich der Lösung schon deutlich weiter!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.