SQL „Bereinigen“ einer SQLite-Datenbanktabelle

uburoi

Lt. Commander
Registriert
Aug. 2008
Beiträge
1.313
Hallo zusammen!

Um meine über alle möglichen Platten und Partitionen verteilten PDF-Dokumente ein wenig zu bündeln, habe ich mir eine App geschrieben, die gewissermaßen als Dateibrowser und PDF-Viewer fungiert (s. Screenshot). Einige zur jeder Datei gehörigen Daten speichere ich in einer lokalen SQLite-Datenbank. Diese ist extrem simpel aufgebaut: Es gibt eine Tabelle für die Dokumente und eine für die Kategorien, die im Auswahlmenü angezeigt werden. Beide Entitäten sind durch eine 1:n-Relation verknüpft, und die Dokumenttabelle enthält jeweils die ID einer Kategorie als Fremdschlüssel (s. Anhang).

Nun mein Anliegen: Ich möchte bei jedem Programmende die Kategorientabelle dergestalt bereinigen, dass alle Kategorien gelöscht werden (etwa nach einer Kategorienänderung in allen zugehörigen Dokumenten), die in der Dokumenttabelle nicht mehr vorkommen. Ich könnte das im Programm machen, aber das ist mir zu umständlich. Gibt es eine Möglichkeit, das auch direkt "intern" via SQL-Befehl zu erledigen? Ich denke an eine verschachtelte Anweisung ("DELETE FROM Kategorien …"), in der sicherlich auch die COUNT-Anweisung nützlich sein könnte, bin aber noch nicht auf eine zufriedenstellende Lösung gekommen.
Hat da jemand mit mehr SQL-Erfahrung ein Idee?

Gruß Jens
 

Anhänge

  • Bildschirmfoto 2021-08-05 um 11.38.01.png
    Bildschirmfoto 2021-08-05 um 11.38.01.png
    794,1 KB · Aufrufe: 223
  • DocManagerDB.png
    DocManagerDB.png
    41,6 KB · Aufrufe: 220
Etwas in der Art sollte klappen:
"Delete from Kategorieren where DokId not in (select DokId from Dokumente);"

Edit:
Ah seh grad ich hab es falsch rum "Delete from Kategorieren where KID not in (select KID from Dokumente);"
 
  • Gefällt mir
Reaktionen: kim88
Das hat funktioniert. Ganz herzlichen Dank dafür! 👍

Gruß Jens
 
Zurück
Oben