Hallo zusammen,
ich habe ein Problem mit einer einschränkenden Bedingung in einem JOIN. Es wäre toll, wenn jemand eine Antwort dazu hätte.
Ich habe eine Tabelle
CREATE TABLE beziehungen (
id int not null,
vater int,
benutzer varchar (30) not null;
in der Bezeihungen zwischen Objekten in den Spalten "id" und "vater" gespeichert werden. "Benutzer" dient dazu zu speichern, wer einen Eintrag angelegt hat. Über einen JOIN lese ich aus, welche Einträge eine id haben, die ihrerseits nicht als vater eingetragen ist. Kurz gesagt, für welches Element sind keine Kindelemente eingetragen. Das Statement ist folgt formuliert:
SELECT
a.id, a.vater,
a.benutzer, a.rechner
FROM beziehungen AS a LEFT JOIN beziehungen AS b ON a.id = b.vater
WHERE b.vater Is Null;
Soweit funktioniert das ganze auch so wie es soll. Das Problem ist es, wenn die Tabelle von mehreren Nutzern gefüllt wird, die teils identische Einträge schreiben. Dann ist es möglich, dass ein Element bereits im Kontext eines anderen Nutzers angelegt wurde und daher für den eigenen Nutzer ein falsches Ergebnis durch das SELECT gelifert wird. Mein Lösungsansat war es die WHERE-Clause einzuschränken.
SELECT
a.id, a.vater,
a.benutzer, a.rechner
FROM beziehungen AS a LEFT JOIN beziehungen AS b ON a.id = b.vater
WHERE b.vater Is Null AND a.benutzer='meinNutzer';
Leider hat dies auch nicht den gewünschten Erfolgt, da so keine Elemente gefunden werden, die in meinem Nutzerkontext keinen Kinder haben, jedoch in dem Kontext eines anderen Nutzers.
Hat jemand einen Denkanstoß, wie diese Abfrage korrekt formuliert werden müsste, um ausschließlich die Elemente meines Nutzers zu berücksichtigen?
Viele Grüße
rodgerwilco