dhillo: DELETE mit JOIN

Ich habe 2 Tabellen: user und category.
Jedem User können mehrere Kategorien zugewiesen werden und jeder Kategorie mehrere User. Dazu habe ich eine "Vermittler"-Tabelle eingerichtet, welche user.ID und category.ID speichert. Nehmen wir mal folgende Daten an:

table user:
ID   name
1    Karl
2    Peter

table category:
ID   name
1    Pflaumen
2    Birnen
3    Kirschen

table connection
ID   userID   catID
1    1        1
2    1        2
3    2        1
4    2        3
5    3        3
6    3        4

Die letzten beiden Datensätze der table connection sind von früheren Nutzern die sich gelöscht haben bzw. mit Kategorien, die gelöscht wurden. Jetzt grübele ich an einem SQL-Query, welches mit alle Datensätze der table connection löscht, zu denen entweder kein User oder keine Kategorie mehr existiert.

Danke

  1. Hallo dhillo

    Jetzt grübele ich an einem SQL-Query, welches mit alle Datensätze der table connection löscht, zu denen entweder kein User oder keine Kategorie mehr existiert.

    Du könntest eventuell Funktionalität Deines Datenbankmanagementsystems (DBMS), das Du uns leider verschwiegen hast, nutzen, um solche Einträge von vornherein zu vermeiden. Da die Daten nun einmal vorhanden sind, könnte Dir der (LEFT) OUTER JOIN helfen. Ein Beispiel wäre MySQL, da kannst Du die JOIN-Syntax unter http://dev.mysql.com/doc/mysql/en/join.html nachlesen. IS NULL ist dazu ein nützliches Kriterium für die WHERE-Klausel.

    Freundliche Grüße

    Vinzenz

  2. yo,

    wie bereits erwänht hilft dir ein outer join weiter. ich mache mal einfach halber nur den SELECT, damit du überprüfen kannst, ob die entsprechenden datensätze selektiert werden und nur die.

    SELECT u.id, u.name, c.id, c.userid
    FROM user AS u LEFT JOIN connection AS c ON (u.id=c.userid)
    WHERE c.userid IS NULL

    Ilja