SQL Tabellensprung

iGDark

Lt. Junior Grade
Registriert
Sep. 2005
Beiträge
306
Hi,

ich habe hier ein kleines Problem welches ich wohl mit InnoDB nicht hätte - aber eben mit MyISAM habe ^^

und zwar ich habe n forum. jedem forum-beitrag wird logischer weise ne user-id mit eingespeichert des jeweiligen posters.

diese user-id findet sich (logischer weise) in der user-tabelle mit dem nicknamen und dem ganzen kram, was einen user eben so ausmacht.

jetzt wurde ein user gelöscht. der forum beitrag existiert aber noch da der user direkt in der user-tabelle gelöscht wurde (es waren mehrere user die gelöscht wurden). problem ist nun also, dass es forum-beiträge gibt, die auf einen user verweisen, den es nicht mehr gibt.

die abfrage im forum läuft mit einem inner-join auf die user tabelle (bei gleicher id).

wie kann ich jetzt mit einem sql-befehl rausfinden, welche beiträge einen nicht vorhandenen user haben?
 
nope, outer join gibts bei ganz mysql nicht. left und right join führen mich auch nicht zum ziel...
werd ich wohl n phpskript schreiben müssen, dass alle forenbeiträge abklappert^^
 
Select * from Forumtabelle where UserID not in (select UserID from Benutzertabelle [where UserID is not null]) [ and UserID is not null] (wenns Nuller Felder gibt, kannst mit not in eventuell Probleme geben)

:)
 
Zuletzt bearbeitet:
Wäre ungefähr das wonach du suchen könntest:
Code:
SELECT * FROM BEITRAEGE 
WHERE NOT EXISTS(
  SELECT * FROM BENUTZER 
  WHERE BENUTZER.UserID=BEITRAEGE.UserID)

oder versuch das Beispiel von Matrix ...

PS: Wenn so einfach der User gelöscht werden konnte, dann würde ich mal schnell einen Foreignkey in der Tabelle BEITRAEGE anlegen. Sonst rammelt man beim nächsten Löschversuch wieder in das gleiche Problem. Wäre es da nicht besser den User auf "inaktiv" oder ähnlich zu setzen, statt gleich ganz aus der Datenbank zu löschen? Die Beiträge sind nur ein Beispiel dafür was bei solchen Aktionen dann schief läuft und die Datenbank in einen inkonsistenten Status bringt.
 
Zuletzt bearbeitet:
Zurück
Oben