DELETE mit JOIN
dhillo
- datenbank
0 Vinzenz Mai0 Ilja
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
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
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