MySQL: Anzahl verlinkter Rows auf Foreign Key

Tommy57

Erfahrenes Mitglied
Hi,

ich möchte gerne Zeilen aus einer Datenbank-Tabelle löschen, die in keiner Tabelle verwendet werden. Da ich die Tabelle für Zählungen verwende, ist dieser Vorgang leider wichtig.

Gibt es eine Möglichkeit, ohne alle Tabellen einzeln aufzuzählen, herauszufinden, welche Spalten oder Zeilen auf jede ID der Tabelle zeigt und dann die Anzahl zu zählen?

Gruß, Tommy
 
Ja. Es ist möglich.
Wieviel Tabellen verweisen denn auf diese Tabelle?
Und zeig mal ein bisschen Beispiel mit Feldnamen und so Dann können wir helfen ein SQL zusammenzusetzen.

Ansonsten grundsätzlich
Code:
select distinct
	mt.id
from
	masterTable mt
	left join slave1 s1 ob mt.id = s1.pid
	left join slave2 s2 ob mt.id = s1.pid
	left join slave3 s3 ob mt.id = s1.pid
where
	s1.id is null
	and s2.id is null
	and s3.id is null
 
Hi Yaslaw,

danke für die schnelle Antwort. Meine Frage bezog sich eher darauf zu ermitteln, ob es quasi Elemente ohne eine einzige Verlinkung gibt. Im Prinzip liegen in der Datenbank Teams, die nur Sinn machen, wenn sie auch in anderen Tabellen verwendet werden. Ansonsten sind es im Prinzip Leichen und können gelöscht werden, da sie Zählungen beeinflussen.

Über eine normale Abfrage hätte ich es auch gemacht, aber wollte vermeiden, alle Tabellen zu kontrollieren.
 
Na da ist doch schon der Query von Yaslaw das richtige für dich. Du musst einfach prüfen ob Einträge aus der Master-Tabelle nicht in den anderen Tabellen vorkommt. Das erreichst du, wenn du einen Left JOin verwendest und auf das Ergebnis null prüfst.
 
Ja genau. Aber die Idee war eigentlich eben nicht alle Tabellen einzeln zu prüfen. Es sind glaub ich fast 100 Tabellen. Aber ich prüfe es so, wie Yaslaw gesagt hat. Das ist super so. Danke
 
Dann musst du einen Rutine Programmieren, dass alle deine Tabelle durchgeht, prüft ob das Feld team-id vorhanden ist. Mit allen Treffern ein grosses SQL zusammenstellen..

Aber ehrlich, wenn du fast 100 Tabellen hast in der diese ID vorkommt, dann bezweifle ich, dass du eine saubere Datenstruktur hast. Ich vermute mal, du hast für jedes Jahr eine eigene Tabelle gemacht. Oder so ähnlich.
Wenn ja, bau deine DB um.
 
Hi Yaslaw. Nee, so war das nicht gemeint. Die Datenbank hat vermutlich rund 100 Tabellen. Diese ID sollte nur in 4-5 Tabellen vorkommen, aber ich wollte nur auf Nummer sicher gehen, bevor ich die Zeilen lösche und sie werden doch noch in irgendeiner anderen Tabelle gelöscht. Dachte, wenn er im Stande ist, die anderen Zeilen zu löschen, kennt er vllt auch die Anzahl davon.
 
Dann kannst du auch keine INNER JOIN mit allen Tabellen machen. Das geht ja nur, wenn die Tabelle die ID besitzt.
Am besten setzt du dich mal hin und malst ein Datenbankdiagram. Mit so vielen Tabellen kommt man da fast nicht drum herum wenn an den Überblick nicht verlieren will.
 
Du hast schon recht. Da es um Fussball geht und wir echt viele Daten haben über Stadien, Begegnungen, Platzierungen, Titel, Auszeichnungen, Karrieren, Videos, Zitate, Quiz-Fragen, TV-Programm und vieles mehr summiert sich das schon. Da müsste ich echt mal so ein Datenbankdiagramm erstellen. Gute Idee!

Bei der Tabelle, um die es mir geht, handelt es sich um die Info, welches Team in welchem Jahr in welcher Liga gespielt hat. Wird diese ID nirgends nochmal verwendet, ist das ein Zeichen dafür, dass es ein sehr alter Matching Fehler ist, weil das Team zum Beispiel zwei Schreibweisen hat. Dadurch kommt es zum Beispiel vor, dass wir 18 Teams in der Tabelle (Fussball Tabelle, nicht Datenbank Tabelle) haben, aber 19 Teilnehmer registriert sind. Da ich prinzipiell foreign keys verwende, dachte ich, ich könnte die Anzahl der Zeilen zählen, die mit der ID verknüpft sind. Dürften aber wie gesagt nur 4-5 Tabellen sein. Ich kann das auch im Dump schnell per Textsuche herausfinden. Dachte nur, vllt gibt es eine elegantere Lösung.
 

Neue Beiträge

Zurück